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. |