Класс D2.0 имеет свойство класса __monitor
, которое «предоставляет доступ к монитору объекта объекта» (documentation). Я искал вокруг и не нашел никакой информации, кроме this бит детали. Итак: что такое монитор? Почему один монитор используется для всех synchronized member functions? Является ли это synchronization primitive, используемым для синхронизации функций-членов, подобных Java? И почему свойство __monitor
в языке def, если вы не собираетесь использовать его/какие прецеденты?Что такое монитор класса в D?
10
A
ответ
6
Монитор - это лениво инициализированный объект, синхронизированный всеми синхронизированными методами, как и на Java. В отличие от Java, D - это язык системного программирования и раскрывает более подробные сведения о том, как все работает на всякий случай, если вам нужно их взломать, даже если это обычно - плохая идея. Это позволяет настраивать поведение. Например, можно настроить объект монитора класса или использовать core.sync.mutex
, который разделяет монитор с классом, который его владеет.
Спасибо. Итак, если я посмотрю на 'object.d', я вижу интерфейс« Object.Monitor »(также известный как« IMonitor ») для этого монитора. Это то, что я должен реализовать? И если я посмотрю на «core.sync.mutex», я вижу пример использования (в комментариях что-то вроде '// ПРИМЕЧАНИЕ: С DMD это может быть« o .__ monitor = & m_proxy ».'). Верный? – stephan
@stephan: Я не уверен, мне никогда не приходилось возиться с этим раньше, поэтому я не знаю подробностей об этом. – dsimcha
Вам не нужно когда-либо реализовывать монитор или устанавливать его самостоятельно, если вы ничего не делаете * очень * странно. Я использовал несколько примитивов синхронизации в D несколько раз и никогда не должен был делать ничего подобного. –