Что такое классный монитор в D?

D2.0 классы имеют свойство класса __monitor, которое "предоставляет доступ к монитору объектов класса" (документация). Я немного искал и не нашел никакой информации, кроме этого подробного описания. Итак: что такое монитор? Почему один монитор используется для всех синхронизированных функций-членов? Является ли это примитив синхронизации, используемый для синхронизации функций-членов, подобных Java? И почему свойство __monitor в языке def, если вы не должны использовать его/каковы прецеденты?

Ответ 1

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