Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 17115|Yanıt: 0

[İletişim] AutoResetEvent'in .net/c# içindeki ayrıntılı açıklaması

[Bağlantıyı kopyala]
Yayınlandı 20.03.2018 13:19:01 | | |

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




Önceki:.har file parsing tool ve HARViewer
Önümüzdeki:Zookeeper dağıtılmış kilit uygulaması
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com