2010-03-08 2 views
10

Класс D2.0 имеет свойство класса __monitor, которое «предоставляет доступ к монитору объекта объекта» (documentation). Я искал вокруг и не нашел никакой информации, кроме this бит детали. Итак: что такое монитор? Почему один монитор используется для всех synchronized member functions? Является ли это synchronization primitive, используемым для синхронизации функций-членов, подобных Java? И почему свойство __monitor в языке def, если вы не собираетесь использовать его/какие прецеденты?Что такое монитор класса в D?

ответ

6

Монитор - это лениво инициализированный объект, синхронизированный всеми синхронизированными методами, как и на Java. В отличие от Java, D - это язык системного программирования и раскрывает более подробные сведения о том, как все работает на всякий случай, если вам нужно их взломать, даже если это обычно - плохая идея. Это позволяет настраивать поведение. Например, можно настроить объект монитора класса или использовать core.sync.mutex, который разделяет монитор с классом, который его владеет.

+1

Спасибо. Итак, если я посмотрю на 'object.d', я вижу интерфейс« Object.Monitor »(также известный как« IMonitor ») для этого монитора. Это то, что я должен реализовать? И если я посмотрю на «core.sync.mutex», я вижу пример использования (в комментариях что-то вроде '// ПРИМЕЧАНИЕ: С DMD это может быть« o .__ monitor = & m_proxy ».'). Верный? – stephan

+0

@stephan: Я не уверен, мне никогда не приходилось возиться с этим раньше, поэтому я не знаю подробностей об этом. – dsimcha

+0

Вам не нужно когда-либо реализовывать монитор или устанавливать его самостоятельно, если вы ничего не делаете * очень * странно. Я использовал несколько примитивов синхронизации в D несколько раз и никогда не должен был делать ничего подобного. –

 Смежные вопросы

  • Нет связанных вопросов^_^