2010-03-08 6 views
10

D2.0 Klassen haben eine __monitor Klasseneigenschaft, die "Zugriff auf den Monitor des Klassenobjekts gewährt" (documentation). Ich suchte ein wenig und fand keine Informationen außer this Detail. Also: Was ist ein Monitor? Warum wird ein Monitor für alle synchronized member functions verwendet? Ist es ein synchronization primitive für die Synchronisierung von Member-Funktionen ähnlich wie Java? Und warum ist die Eigenschaft __monitor in der Sprache def, wenn Sie sie nicht verwenden sollen/was sind die Anwendungsfälle?Was ist ein Klassenmonitor in D?

Antwort

6

Der Monitor ist ein lazy initialisiertes Objekt, mit dem alle synchronisierten Methoden synchronisiert werden, genau wie in Java. Im Gegensatz zu Java ist D eine System-Programmiersprache und stellt Details der unteren Ebene dar, wie die Dinge funktionieren, nur für den Fall, dass Sie sie hacken müssen, selbst wenn dies so ist, ist dies eine schlechte Idee. Dadurch können Sie das Verhalten anpassen. Beispielsweise ist es möglich, das Monitorobjekt einer Klasse anzupassen oder core.sync.mutex zu verwenden, die einen Monitor mit der Klasse teilt, die es besitzt.

+1

Danke. Wenn ich also 'object.d' betrachte, sehe ich eine Schnittstelle' Object.Monitor' (alias 'IMonitor') für diesen Monitor. Das muss ich umsetzen? Und wenn ich 'core.sync.mutex' ansehe, sehe ich eine Beispielverwendung (in den Kommentaren etwas wie' // HINWEIS: Bei DMD kann dies "o .__ monitor = & m_proxy" .') sein. Richtig? – stephan

+0

@stephan: Ich bin mir nicht sicher, ich habe mich noch nie vorher damit herumschlagen müssen, also kenne ich die Details nicht. – dsimcha

+0

Sie sollten den Monitor niemals selbst implementieren oder selbst einstellen, es sei denn, Sie tun etwas sehr seltsames. Ich habe die verschiedenen Synchronisationsprimitive in D ein paar Mal benutzt und musste nie etwas dergleichen tun. –