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
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).
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.
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
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
ReaderWriterLock sınıfı da bakmaya değerdi. Bu, Java'daki ReentrantReadWriteLock'a benzer.
+1. Ancak MSDN, ReaderWriterLock işlevi üzerinden [ReaderWriterLockSlim] (https://msdn.microsoft.com/en-us/library/system.threading.readerwriterlockslim.aspx) kullanılmasını önerir. – NightOwl888
- 1. En İyi C# bağlamaları?
- 2. C# ile Regex'te "en az eşleşme" araması nasıl yapılır?
- 3. En iyi yol C#
- 4. en iyi (veya en azından iyi) kılavuz
- 5. C#: En İyi Yöntemler Debug.Print
- 6. C ve C++ için en iyi duruma getirme araçları
- 7. C ve C++ için en iyi hata ayıklama aracı
- 8. En iyi ve basit bir veri yapısı
- 9. Java yöntemlerini yeniden kullanmanın en iyi yolları
- 10. Emacs için en iyi java araçları
- 11. java için en iyi html ayrıştırıcısı nedir?
- 12. http bağlantıları için en iyi java lib?
- 13. Java Onaylamalarını Kontrol Etme - En İyi Uygulamalar
- 14. En iyi java web hizmeti çerçevesi nedir?
- 15. Java - 2D dizi yazdırmanın en iyi yolu?
- 16. en iyi java jabber istemci kütüphanesi
- 17. Java - JAVA uygulamamda hangi muhasebe modülü en iyi şekilde yerleştirilir?
- 18. Nesneyi opencv ile bulmanın en iyi yöntemi
- 19. fsharp ile eşleşme
- 20. C# argümanını en iyi nasıl değiştirebilir ve döndürebilirsiniz?
- 21. En iyi OAuth2 C# kitaplığı nedir?
- 22. objektif-c en iyi uygulamaları günlüğe kaydetme
- 23. ctags en iyi uygulamalar
- 24. En İyi C++ RTP/RTSP kütüphanesi
- 25. C++, en iyi uygulamalar, int veya size_t?
- 26. Çoğaltılmış kodun kaldırılmasının en iyi yolu C#
- 27. PostGIS ve OpenLayers ile çalışmanın en iyi yolu hangisidir?
- 28. OpenGL ve Cocoa ile metin çizmenin en iyi yolu?
- 29. PHP ile PDF oluşturmanın en iyi yolu
- 30. Node.js ile MongoDB'yi kullanmanın en iyi yolu?
Benim için çalışıyor gibi görünüyor! Teşekkürler! Başka bir soru: Monitor, Java isHeldByCurrentThread()? –
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 –