我想编译一个所有可能的条件列表,使Monitor进入内核模式/使用内核同步对象。什么时候.NET Monitor进入内核模式?
同步块有一个引用内核对象的字段,因此我推断lock
有时会进入内核模式。
我发现这一点:Lock (Monitor) internal implementation in .NET
但它有太多的问题需要回答,唯一有用的信息是,OP通过简单地说明该lock
将进入内核模式的某个时候回答了自己的问题。此外,没有任何链接支持该答案。
我的问题是不同的 - 我想知道何时lock
将进入内核模式(不是如果不是为什么 - 何时)。
我更感兴趣地听到有关.NET 4和4.5是否存在与旧版本任何区别
编辑:从里氏书:“一个同步块包含一个内核对象领域,拥有线程ID,递归计数和等待线程数。“
非常感谢。特别是对于SSCLI - 我不知道这是公开的。 – 2013-02-17 17:11:13
感谢您对CLR资源中的相关部分的评论。我特别感兴趣的是纺纱部分:它通常声称在进入内核之前首先监测纺纱。我感兴趣的是它如何旋转(迭代次数,...)。我看不到你已经描述的代码路径中的旋转,但是,我看到AwareLock :: Contention由AwareLock :: TryEnter调用的旋转逻辑。现在看来,这只适用于使用超时时的TryEnter,所以我猜在使用c#lock关键字时不会使用旋转。我对吗? – 2013-12-10 17:42:02