c# - 多线程锁定/监控

标签 c# .net multithreading locking monitor

在 .NET 中,假设 thread A 锁定了一个对象。同时,线程B线程C被阻塞,等待线程A解锁对象。

现在,线程 A 解锁了对象。接下来将选择哪个线程(B 或 C)?它是如何确定的?

最佳答案

简短的回答是它是不确定的——也就是说,你永远不知道。

中等答案是等待获取锁的线程被放入“就绪队列”,即 FIFO,但您不能依赖它。

长答案是,可以“借用”就绪队列中的线程来运行称为 APC (Asynchronous Procedure Calls) 的小块工作。发生这种情况时,它们会失去它们在队列中的位置,当 APC 完成时,它们被放回就绪队列 - 但在最后。

所以,回到简短的回答:你永远不知道。

关于c# - 多线程锁定/监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14416853/

相关文章:

c# - 如何使具有相同数据的对象具有相同的键?

c# - 构造函数注入(inject) Win8 App

c# - 在 Unity 中找不到 rigidBody2D.MovePosition

c# - 如何将类中的字符串连接到表单

c# - 包含 IDisposable 成员的 WPF 控件

c++ - 列出线程 C++

java - java中通过FTP异步下载文件

java - 内部锁定、客户端锁定和外部锁定之间的区别?

c# - Thread.Sleep(Timespan.Zero) 可以在这种情况下明智地使用吗?

c# - Visual Studio 2013 在打开 xsl 时崩溃