2009-03-05 9 views
8

Başka bir çapraz dil sorusu: Birisi bana C# Threading yapılarının Java ReentrantLock ve Condition sınıflarıyla en iyi eşleştiğini söyleyebilir mi? ReentrantLock, Condition sinyal() ve await() yöntemlerini kullanırken LockInterruptibly() ve unlock() yöntemlerini kilitler. C# kodu - ya da benzer bir şey korumak mümkün olmak istiyorum bu kombinasyonu ... Önceden teşekkürler.C# ile Java ReentrantLock ve Condition'da en iyi eşleşme?

cevap

8

Aradığınız şeyin statik Monitor sınıfı olduğunu düşünüyorum. blocking ve non-blocking muteks edinimi yanı sıra condition variable işlemleri için izin verir. (Onlara sinyal ve beklemek yerine Pulse, PulseAll ve Wait diyoruz).

+0

Benim için çalışıyor gibi görünüyor! Teşekkürler! Başka bir soru: Monitor, Java isHeldByCurrentThread()? –

+0

Hayır, Monitor'ü genişletebilir ve başarılı bir şekilde Enter veya TryEnter olarak adlandırılan Thread'e bir referans tutabilirsiniz. Geçerli iş parçacığı Thread.CurrentThread kullanılarak erişilebilir: http://msdn.microsoft.com/en-us/library/system.threading.thread.currentthread.aspx –

0

YASAL UYARI: Bu Java sınıflarını bilmiyorum, burada karanlıkta bir bıçak alıyorum.

C# 'da, lock hesap özetinde (Ben herhangi bir nesne üzerinde kilitlenebilir, bunun Java's synchronized gibi bir ifade olduğunu düşünüyorum). Bu ifadeyi kullanıyorum veya Monitor.Enter(obj) ve Monitor.Exit(obj) ReentrantLock gibi bir bit olurdu.

ManualResetEvent ve AutoResetEvent adında iki sınıf vardır. Bu sınıflar, Wait yöntemine ve Koşul'un sinyaline benzer ve beklediğim bir Set yöntemine sahiptir. Bu iki sınıf arasındaki fark, ManualResetEvent'un (hiç kimseyi engellemeyen) ayarlanmış ve Reset olmalıdır. Ve AutoResetEvent - adından da anlaşılacağı gibi - otomatik olarak sıfırla.

+0

Zaman uyumsuz deyimde kilit kullanılamıyor ve izleme yöntemleri çağrılması gerekiyor Senkronize iş parçacığından .. Java'nın ReentrantLock noktası, bu sorunları ortadan kaldırmaktır. – Vistritium

+0

Bu soru sorulduğunda, C# veya Java'da async yöntemleri olarak görünmüyordu, bu ReentrantLock'un asıl noktasını, ya da en azından eğitimcinin atıfta bulunduğu noktayı pek düşünmediğini düşünüyorum. Benzerliği göstermek için – configurator

1

ReaderWriterLock sınıfı da bakmaya değerdi. Bu, Java'daki ReentrantReadWriteLock'a benzer.

+0

+1. Ancak MSDN, ReaderWriterLock işlevi üzerinden [ReaderWriterLockSlim] (https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx) kullanılmasını önerir. – NightOwl888