【发布时间】:2011-07-03 23:08:01
【问题描述】:
要掌握某些技术,您必须知道它是如何在更低的抽象级别上实现的。在多线程编程的情况下,最好了解同步原语。
这是一个问题,如何在 .NET 中实现 Lock (Monitor)?
我对这些方面很感兴趣:
- 它是否使用操作系统对象?;
- 它需要用户模式还是内核模式?;
- 等待锁定的线程的开销是多少?;
- 在什么情况下,等待锁的线程队列可能会被违反?
更新:
“如果多个线程争用锁,它们将在“就绪队列”中排队,并按照先到先得的原则授予锁。注意:Windows 和 CLR 行为中的细微差别意味着队列的公平性有时会被违反。”[C# 4.0 in a Nutshell, Joseph Albahari] 所以这就是我在最后一个关于“违反队列”的问题中要问的问题。
【问题讨论】:
-
不,用户,无论获取锁需要多长时间,都不知道“违规队列”是什么样的。试着提出一个更好的问题。
-
如果我没记错的话,它会尝试旋转一段时间,如果这不起作用,它会返回内核。因此,如果锁不被争用,它会相当便宜,但对于高锁争用,它可能会变得更加昂贵。
-
此行为看起来与 Windows 中的关键部分相同。这是否意味着关键部分在后台使用?
标签: c# .net multithreading synchronization monitor