İplikle ilgili kavramlar 1. İş parçacığı senkronizasyonu ManualResetEvent Set() yöntemi durumu Sinyal olarak ayarlar Sinyal yok olarak ayarlamak için Reset() WaitOne() sinyal olana kadar bloklar ve WaitOne çağrılırken sinyal varsa engellemez AutoResetEvent ManualResetEvent'ten farkı, AutoResetEvent.WaitOne() otomatik olarak etkinlik nesnesinin durumunu değiştirir; yani, AutoResetEvent.WaitOne() çalıştırıldığında olayın durumu değişir. Sinyal - > sinyal yok; Sinyal yok – > sinyali var
example:
myResetEven.Set(), aslında bir switch'e eşdeğerdir; eğer set() yöntemi çalıştırılmazsa, aşağıdaki waitOne() bildirimin çalıştırılmasına izin vermeyi bekleyemez, böylece waitOne'dan sonraki ifade yürütülmez. Monitör yöntemi Wait() Pulse() mekanizması, bir nesne Monitor.Wait() yayımladığında, nesneye erişen iş parçacığı bekleme durumunda kalır. ta ki bir uyanış sinyali alana kadar. Monitor.Pulse() sinyalleri bekleyen iş parçacığına göndermek için kullanılır. Yani, Monitor.Enter() ile Monitor.Exit() arasındaki kritik alanda, nesnenin kilidini açıp mevcut iş parçacığını engellemek için kuyruk bekleme durumundadır.
Lock, Mutex'ten farklıdır Birden fazla iş parçacığı arasında kilitlenme senkronizasyonu Mutex süreçleri arasında birden fazla iş parçacığının senkronizasyonu veya birden fazla sürecin senkronizasyonu .Net çok iş parçacıklı programlamada AutoResetEvent ve ManualResetEvent sınıfları sıkça kullanılır ve kullanımları oldukça benzerdir, ancak farklılıklar vardır. Set yöntemi sinyali gönderme durumuna getirir, Reset yöntemi sinyali göndermeyen duruma getirir ve WaitOne sinyalin gönderilmesini bekler. Yapıcının başlangıç durumu parametre değeriyle belirlenebilir; eğer doğruysa bloklama değildir ve yanlış engelleme durumudur. Bir iş parçacağı WaitOne yöntemini çağırırsa, iş parçacığı gönderme durumundayken sinyali alır ve aşağıya doğru yürütülmeye devam eder. Fark şu ki, çağrıdan sonra AutoResetEvent.WaitOne() aynı anda yalnızca bir iş parçacığına girmesine izin verir ve bir iş parçacığı sinyal aldığında, AutoResetEvent otomatik olarak sinyali gönderme durumuna getirir ve WaitOne'ı çağıran diğer iş parçacıkları sadece beklemeye devam edebilir. Yani, AutoResetEvent aynı anda sadece bir iş parçacığını uyandırır; ManualResetEvent, birden fazla iş parçacığını uyandırabilir, çünkü bir iş parçacığı ManualResetEvent.Set() metodunu çağırdığında, WaitOne'ı çağıran diğer iş parçacıkları çalıştırmaya devam etme sinyali alır ve ManualResetEvent sinyali otomatik olarak göndermemeye ayarlamaz. Başka bir deyişle, ManualResetEvent.Reset() yöntemi manuel çağrılmadıkça, ManualResetEvent sinyalli kalır ve ManualResetEvent aynı anda birden fazla iş parçacığını uyandırarak yürütmeye devam edebilir. |