2010-03-08 15 views
10

D2.0 sınıfları, "sınıf nesnesinin ekranına erişim sağlayan" __monitor sınıf özelliğine sahiptir (documentation). Biraz araştırdım ve this bit detayı dışında herhangi bir bilgi bulamadım. Yani: monitör nedir? Neden bir monitör synchronized member functions için kullanılır? Java benzeri üye işlevlerini senkronize etmek için kullanılan bir synchronization primitive mu? Ve eğer kullanmamanız gerekiyorsa, __monitor özelliği, dil defasında neden/kullanım durumlarıdır?D'de bir sınıf monitörü nedir?

cevap

6

Monitör, tüm senkronize yöntemlerin Java'da olduğu gibi senkronize edildiği, tembel olarak başlatılmış bir nesnedir. Java'dan farklı olarak, D bir sistem programlama dilidir ve genelde kötü bir fikir olsa bile, bunları hacklemeniz gerektiğinde işlerin nasıl çalıştığına dair alt düzey detayları ortaya koyar. Bu davranışınızı özelleştirmenizi sağlar. Örneğin, bir sınıfın monitör nesnesini özelleştirmek veya bir monitörü kendisine ait olan sınıfla paylaşan core.sync.mutex kullanmak mümkündür.

+1

Teşekkürler. Yani, eğer 'object.d' 'ye bakarsam, bu monitör için bir' Object.Monitor '(aka 'IMonitor') arayüzü görüyorum. Benim uygulamak zorunda olduğum şey bu mu? Ve eğer 'core.sync.mutex' dosyasına bakarsam, örnek bir kullanım görüyorum (yorumlarda // // gibi bir şey var: DMD ile bu "o .__ monitor = & m_proxy" olabilir.). Doğru? – stephan

+0

@stephan: Emin değilim, daha önce bununla uğraşmak zorunda kalmadım, bu yüzden onun detaylarını bilmiyorum. – dsimcha

+0

Bir şey yapmazsanız, monitörü hiç uygulamak zorunda kalmamalı ya da kendiniz ayarlamamalısınız * çok * garip. Çeşitli senkronizasyon ilkelerini D'de birkaç kez kullandım ve hiçbir zaman böyle bir şey yapmak zorunda kalmam. –

İlgili konular