2010-03-08 17 views
10

Las clases D2.0 tienen una propiedad de clase __monitor que "da acceso al monitor del objeto de clase" (documentation). Busqué un poco y no encontré ninguna información a excepción de this poco de detalle. Entonces, ¿qué es un monitor? ¿Por qué se usa un monitor para todos synchronized member functions? ¿Es synchronization primitive usado para sincronizar funciones miembro similares a Java? ¿Y por qué la propiedad __monitor está en la definición de idioma si no se supone que debe usarla/¿Cuáles son los casos de uso?¿Qué es un monitor de clase en D?

Respuesta

6

El monitor es un objeto lentamente inicializado que sincroniza todos los métodos sincronizados, al igual que en Java. A diferencia de Java, D es un lenguaje de programación de sistemas y expone detalles de nivel inferior de cómo funcionan las cosas en caso de que necesite hackearlas, incluso si hacerlo es generalmente una mala idea. Esto le permite personalizar el comportamiento. Por ejemplo, es posible personalizar el objeto de monitor de una clase, o usar un core.sync.mutex que comparte un monitor con la clase que lo posee.

+1

Gracias. Entonces, si miro 'object.d', veo una interfaz' Object.Monitor' (alias 'IMonitor') para este monitor. Esto es lo que tengo que implementar? Y si miro 'core.sync.mutex', veo un uso de muestra (en los comentarios algo como' // NOTA: con DMD esto puede ser "o .__ monitor = & m_proxy" .'). ¿Correcto? – stephan

+0

@stephan: No estoy seguro, nunca he tenido que meterme con esto antes, así que no sé los detalles. – dsimcha

+0

No debería tener que implementar el monitor ni configurarlo usted mismo a menos que esté haciendo algo * muy * extraño. He usado varias primitivas de sincronización en D varias veces y nunca he tenido que hacer nada por el estilo. –

Cuestiones relacionadas