Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Pernyataan Kunci Berfungsi dalam C# untuk Memastikan Keselamatan Benang?
Pemahaman mendalam tentang mekanisme keselamatan benang bagi pernyataan Kunci C#
Dalam persekitaran berbilang benang, adalah penting untuk memastikan objek selamat untuk benang. Atas sebab ini, pembangun sering menggunakan pernyataan kunci untuk melindungi bahagian kritikal kod. Artikel ini akan menyelidiki cara dalaman pernyataan kunci, menjelaskan kelakuan dan kesannya.
Struktur pernyataan Kunci
Di bawah tudung, pernyataan kunci ditukar kepada satu siri arahan menggunakan kelas System.Threading.Monitor
. C# 3.0 menggunakan pendekatan berikut:
<code class="language-csharp">var temp = obj; Monitor.Enter(temp); try { // 线程不安全代码 } finally { Monitor.Exit(temp); }</code>
Walau bagaimanapun, bermula dengan C# 4.0, pengubahsuaian kecil telah diperkenalkan:
<code class="language-csharp">bool lockWasTaken = false; var temp = obj; try { Monitor.Enter(temp, ref lockWasTaken); // 线程不安全代码 } finally { if (lockWasTaken) { Monitor.Exit(temp); } }</code>
Memantau dan Menyekat
KaedahMonitor.Enter
ialah teras pernyataan kunci. Ia cuba mendapatkan monitor untuk objek yang ditentukan. Jika utas lain sebelum ini telah melakukan operasi Enter
pada objek yang sama dan belum melakukan operasi Exit
yang sepadan, utas semasa akan menyekat sehingga utas lain melepaskan kunci.
Menunggu selama-lamanya
Adalah penting untuk ambil perhatian bahawa kaedah Monitor.Enter
akan menunggu selama-lamanya untuk kunci tersedia. Tidak seperti beberapa mekanisme penguncian lain, ia tidak mempunyai konsep tamat masa.
Nota Prestasi
Menggunakan kunci boleh menjejaskan prestasi aplikasi. Kunci memperkenalkan perbalahan dengan menghalang sementara utas lain daripada mengakses sumber yang sama. Ini boleh mengakibatkan pengurangan daya pengeluaran dan peningkatan kependaman. Oleh itu, adalah penting untuk menggunakan kunci dengan berhati-hati dan hanya apabila perlu untuk melindungi kod benang-tidak selamat.
Atas ialah kandungan terperinci Bagaimanakah Pernyataan Kunci Berfungsi dalam C# untuk Memastikan Keselamatan Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!