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

Melihat: 17115|Jawab: 0

[Komunikasi] Penjelasan terperinci tentang AutoResetEvent di .net/c#

[Salin tautan]
Diposting pada 20/03/2018 13.19.01 | | |

Konsep terkait utas
1. Sinkronisasi utas
ManualResetEvent
Metode Set() mengatur status ke Signaled
Reset() untuk mengaturnya ke tanpa sinyal
WaitOne() akan memblokir sampai memiliki sinyal, dan jika ada sinyal pada saat memanggil WaitOne, itu tidak akan memblokir
AutoResetEvent
Perbedaan dari ManualResetEvent adalah bahwa AutoResetEvent.WaitOne() secara otomatis mengubah status objek peristiwa, yaitu, status peristiwa berubah setiap kali AutoResetEvent.WaitOne() dijalankan. Sinyal - > tidak ada sinyal; Tidak ada sinyal – > memiliki sinyal
example:


  
myResetEven.Set(), yang sebenarnya setara dengan sakelar, jika metode set() tidak dieksekusi, waitOne() berikut tidak akan dapat menunggu pemberitahuan untuk membiarkannya dieksekusi, sehingga pernyataan setelah waitOne tidak akan dieksekusi.
Metode pemantauan
Mekanisme Wait() Pulse() digunakan untuk interaksi antarutas, ketika objek memancarkan Monitor.Wait(), utas yang mengakses objek akan tetap dalam status menunggu. sampai mendapat sinyal bangun. Monitor.Pulse() digunakan untuk mengirim sinyal ke utas yang menunggu.
Artinya, di area kritis antara Monitor.Enter() dan Monitor.Exit(), untuk melepaskan kunci pada objek dan memblokir utas saat ini, itu dalam status tunggu dalam antrean.

Kunci berbeda dari Mutex
Kunci sinkronisasi antara beberapa utas
Sinkronisasi beberapa utas antara proses Mutex, atau sinkronisasi beberapa proses
Dalam pemrograman multithread .Net, kelas AutoResetEvent dan ManualResetEvent sering digunakan, dan penggunaannya sangat mirip, tetapi ada perbedaan. Metode Set menempatkan sinyal ke status kirim, metode Reset menempatkan sinyal ke status non-kirim, dan WaitOne menunggu sinyal dikirim. Status awal konstruktor dapat ditentukan oleh nilai parameter, jika benar, itu tidak memblokir, dan false adalah status pemblokiran. Jika utas memanggil metode WaitOne, utas mendapatkan sinyal saat berada dalam status kirim dan terus dieksekusi ke bawah. Perbedaannya adalah bahwa setelah panggilan, AutoResetEvent.WaitOne() hanya mengizinkan satu utas masuk pada satu waktu, dan ketika utas mendapatkan sinyal, AutoResetEvent akan secara otomatis menempatkan sinyal ke status tidak ada pengiriman, dan utas lain yang memanggil WaitOne hanya dapat terus menunggu. Artinya, AutoResetEvent hanya membangunkan satu utas pada satu waktu; ManualResetEvent dapat mengaktifkan beberapa utas, karena ketika satu utas memanggil metode ManualResetEvent.Set(), utas lain yang memanggil WaitOne mendapatkan sinyal untuk melanjutkan eksekusi, dan ManualResetEvent tidak secara otomatis mengatur sinyal untuk tidak dikirim. Dengan kata lain, kecuali metode ManualResetEvent.Reset() dipanggil secara manual, ManualResetEvent akan tetap ditandai dan ManualResetEvent dapat membangunkan beberapa utas secara bersamaan untuk melanjutkan eksekusi.




Mantan:Alat penguraian file .har dan HARViewer
Depan:Implementasi kunci terdistribusi Zookeeper
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