Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 20027|Jawab: 0

[Sumber] Kata kunci kunci C# menandai blok pernyataan sebagai area kritis dengan mendapatkan muteks untuk objek tertentu, mengeksekusi pernyataan, tetapi...

[Salin tautan]
Diposting pada 31/12/2015 17.51.01 | | |
Kata kunci kunci menandai blok pernyataan sebagai zona kritis dengan mengambil muteks untuk objek tertentu, mengeksekusi pernyataan, lalu melepaskan kunci.

Pernyataan kunci pada dasarnya menggunakan Monitor.Enter dan Monitor.Exit, yaitu, Monitor.Enter(this) dieksekusi saat lock(this) dieksekusi, dan Monitor.Exit(this) dieksekusi di akhir kurung kurawal keriting. Apa artinya, untuk objek apa pun, bagian pertama dari memori adalah alamat semua metode, dan bagian kedua adalah indeks. Dia menunjuk ke SyncBlock di area Cache SyncBlock di CLR. Apa artinya itu? Artinya, saat Anda menjalankan Monitor.Enter(Object), jika nilai indeks objek negatif, pilih SyncBlock dari Cache SyncBlock dan tempatkan alamatnya dalam indeks objek. Ini menyelesaikan kunci yang ditandai oleh objek, dan utas lain ingin melakukan operasi Monitor.Enter(object) lagi, yang akan mendapatkan indeks dengan objek positif, lalu menunggu. Sampai indeks menjadi negatif, yaitu utas menggunakan Monitor.Exit(object) untuk mengubah indeks menjadi negatif.

Apa yang perlu Anda perhatikan saat menggunakan kunci:
1.lock tidak dapat mengunci nilai null Sebuah objek dapat menunjuk ke null, tetapi null tidak perlu dilepaskan. (Lihat juga: Memahami Nol Penuh)
2.Lock tidak dapat mengunci jenis string, meskipun juga merupakan jenis referensi. Karena jenis string "diarahkan" oleh CLR
Ini berarti bahwa hanya ada satu instans string tertentu di seluruh program, dan objek yang sama mewakili teks tersebut di semua utas dari semua domain aplikasi yang sedang berjalan. Oleh karena itu, selama kunci ditempatkan pada string dengan konten yang sama di mana saja dalam proses aplikasi, semua instans string tersebut dalam aplikasi akan dikunci. Oleh karena itu, yang terbaik adalah mengunci anggota pribadi atau dilindungi yang tidak akan dipertahankan.
3.Locklock objek adalah batas memori blok program
4. Jenis nilai tidak dapat dikunci, karena "objek dilepaskan" berwarna merah di teks sebelumnya, dan jenis nilai bukan jenis referensi
5. Kunci menghindari mengunci jenis atau objek publik yang tidak dikendalikan oleh program.
Misalnya, jika instans dapat diakses publik, lock(this) dapat menjadi masalah karena kode yang tidak terkontrol juga dapat mengunci objek. Hal ini dapat menyebabkan kebuntuan, di mana dua utas atau lebih menunggu untuk melepaskan objek yang sama. Mengunci tipe data publik (bukan objek) juga dapat menyebabkan masalah karena alasan yang sama.
Saat menggunakan lock(this), nilai variabel anggota kelas dapat diubah oleh metode yang tidak berada di zona kritis

Skenario aplikasi: Ini sering digunakan untuk mencegah pengecualian yang tidak pasti dalam nilai variabel publik yang disebabkan oleh operasi multi-utas untuk memastikan keamanan operasi









Mantan:Win8 memulai layanan SQL Server 2012
Depan:[Kecepatan] Pemindai port terbuka segmen IP untuk kecepatan pemindaian yang cepat!!
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com