2010-03-08 14 views
10

Le classi D2.0 hanno una proprietà di classe __monitor che "consente l'accesso al monitor dell'oggetto classe" (documentation). Ho cercato un po 'e non ho trovato alcuna informazione ad eccezione del this bit di dettaglio. Quindi: che cos'è un monitor? Perché un monitor è utilizzato per tutti gli synchronized member functions? È un synchronization primitive utilizzato per la sincronizzazione di funzioni membro simili a Java? E perché la proprietà __monitor nella lingua def se non si suppone che tu la usi/quali sono i casi d'uso?Che cos'è un monitor di classe in D?

risposta

6

Il monitor è un oggetto inizializzato pigramente su cui tutti i metodi sincronizzati si sincronizzano, proprio come in Java. A differenza di Java, D è un linguaggio di programmazione dei sistemi ed espone dettagli di livello inferiore su come funzionano le cose nel caso in cui sia necessario hackerarle, anche se lo è di solito una cattiva idea. Questo ti permette di personalizzare il comportamento. Ad esempio, è possibile personalizzare l'oggetto monitor di una classe o utilizzare uno core.sync.mutex che condivide un monitor con la classe che lo possiede.

+1

Grazie. Quindi, se guardo 'object.d', vedo un'interfaccia' Object.Monitor' (aka 'IMonitor') per questo monitor. Questo è quello che devo implementare? E se guardo 'core.sync.mutex', vedo un esempio di utilizzo (nei commenti qualcosa come' // NOTA: Con DMD questo può essere "o .__ monitor = & m_proxy" .'). Corretta? – stephan

+0

@stephan: Non sono sicuro, non ho mai dovuto fare i conti con questo, quindi non conosco i dettagli. – dsimcha

+0

Non dovresti mai dover implementare il monitor o impostarlo da solo a meno che tu non stia facendo qualcosa di * molto * strano. Ho usato le varie primitive di sincronizzazione in D poche volte e non ho mai dovuto fare nulla del genere. –