D 中的班长是啥?
Posted
技术标签:
【中文标题】D 中的班长是啥?【英文标题】:What is a class monitor in D?D 中的班长是什么? 【发布时间】:2011-01-24 21:05:43 【问题描述】:D2.0 类有一个__monitor
类属性,“允许访问类对象的监视器”(documentation)。我搜索了一下,除了this 一点细节之外没有找到任何信息。那么:什么是显示器?为什么所有synchronized member functions 都使用一台显示器?是不是一个synchronization primitive 用来同步类似Java的成员函数?如果您不应该使用 __monitor
属性,为什么在语言 def 中使用它/用例是什么?
【问题讨论】:
【参考方案1】:监视器是一个延迟初始化的对象,所有同步方法都在该对象上进行同步,就像在 Java 中一样。与 Java 不同,D 是一种系统编程语言,它公开了事物如何工作的较低级别的细节,以防万一您需要破解它们,即使这样做通常是个坏主意。这允许您自定义行为。例如,可以自定义类的监视器对象,或者使用与拥有它的类共享监视器的core.sync.mutex
。
【讨论】:
谢谢。所以,如果我查看object.d
,我会看到此监视器的接口Object.Monitor
(又名IMonitor
)。这是我必须实施的吗?如果我查看 core.sync.mutex
,我会看到一个示例用法(在 cmets 中类似于 // NOTE: With DMD this can be "o.__monitor = &m_proxy".
)。对吗?
@stephan:我不确定,我以前从来没有真正搞过这个,所以我不知道它的细节。
你不应该自己实现或设置监视器,除非你正在做一些非常奇怪的事情。我在 D 中使用过各种同步原语几次,但从来没有做过任何类似的事情。以上是关于D 中的班长是啥?的主要内容,如果未能解决你的问题,请参考以下文章