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

Melihat: 18907|Jawab: 0

[Sumber] lock Mengapa hanya dapat mengunci referensi tetapi bukan jenis nilai

[Salin tautan]
Diposting pada 08/12/2016 10.43.37 | | |

Jika Anda meneruskan jenis nilai, itu akan dikotakkan, dan lain kali kode berjalan di sini, kode akan dikotakkan lagi, dan tidak akan menjadi objek yang sama dua kali, sehingga tidak dapat dikunci



kunci (x)
{
  ...
}

Penguncian sebenarnya dilakukan melalui objek Monitor:

Di atas setara dengan:

System.Object obj = (System.Object)x;
System.Threading.Monitor.Enter(obj);
Coba
{
  ...   
}
akhirnya
{
  System.Threading.Monitor.Exit(obj);
}

Kemudian mengutip kata-kata asli MSDN:
Gunakan Monitor untuk mengunci objek (yaitu, jenis referensi), bukan jenis nilai. Saat Anda meneruskan variabel jenis nilai ke Enter, variabel tersebut dikotakkan sebagai objek. Jika Anda meneruskan variabel yang sama ke Enter lagi, variabel tersebut dikotakkan sebagai objek terpisah, dan utas tidak memblokir. Dalam hal ini, kode yang seharusnya dilindungi oleh Monitor tidak dilindungi. Selanjutnya, ketika Anda meneruskan variabel ke Exit, masih ada objek terpisah lain yang dibuat. Karena objek yang diteruskan ke Exit berbeda dari objek yang diteruskan ke Enter, Monitor melemparkan SynchronizationLockException. Untuk informasi selengkapnya, lihat topik konseptual Pemantauan.




Mantan:Tingkatkan Python 2.6.6 ke 2.7.5 pada sistem Centos 6.4
Depan:Perbedaan antara Directory.GetCurrentDirectory dan Application.StartupPath
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