Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Pernyataan `lock` C# Berfungsi Di Bawah Hud?

Bagaimanakah Pernyataan `lock` C# Berfungsi Di Bawah Hud?

Mary-Kate Olsen
Lepaskan: 2025-01-15 09:54:44
asal
530 orang telah melayarinya

How Does the C# `lock` Statement Work Under the Hood?

Selami cara dalaman lock pernyataan

Pembangun sering menggunakan pernyataan lock untuk melindungi pelaksanaan kod apabila berurusan dengan objek yang tidak selamat untuk benang. Tetapi apa sebenarnya yang berlaku di bawah hud apabila berbilang benang berinteraksi dengan kod yang dilindungi ini?

Selam Dalam: Menjejaki Pelaksanaan lock Kenyataan

Dalam C# 3.0, pernyataan lock diterjemahkan kepada kod berikut:

<code class="language-C#">var temp = obj;
Monitor.Enter(temp);
try
{
    // 非线程安全代码
}
finally
{
    Monitor.Exit(temp);
}</code>
Salin selepas log masuk

Dalam C# 4.0, proses ini telah diubah suai dan kod yang dihasilkan adalah seperti berikut:

<code class="language-C#">bool lockWasTaken = false;
var temp = obj;
try
{
    Monitor.Enter(temp, ref lockWasTaken);
    // 非线程安全代码
}
finally
{
    if (lockWasTaken)
    {
        Monitor.Exit(temp); 
    }
}</code>
Salin selepas log masuk

Monitor.Enter Fungsi

Monitor.Enter memainkan peranan penting dalam kefungsian pernyataan lock. MSDN menerangkan operasinya seperti berikut:

" Gunakan Enter untuk mendapatkan Monitor objek diluluskan sebagai hujah. Jika utas lain telah melaksanakan Enter untuk objek tetapi belum lagi melaksanakan Exit yang sepadan, utas semasa akan menyekat sehingga satu lagi Benang melepaskan objek ”

Pada asasnya, Monitor.Enter menjamin akses eksklusif kepada objek. Jika benang lain cuba memperoleh kunci yang sama, ia akan digantung sehingga kunci dilepaskan. Berbilang panggilan ke Enter daripada urutan yang sama tidak akan menyebabkan sekatan, tetapi memerlukan bilangan Exit panggilan yang sama untuk membuka kunci objek dan membenarkan urutan menunggu menyambung semula pelaksanaan.

Masa menunggu yang tidak terhingga

Perlu diingat bahawa Monitor.Enter akan menunggu selama-lamanya sehingga kunci tersedia. Tidak seperti beberapa mekanisme penguncian, ia tidak menguatkuasakan tamat masa.

Atas ialah kandungan terperinci Bagaimanakah Pernyataan `lock` C# Berfungsi Di Bawah Hud?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan