假设我有类似于以下内容的代码:
var obj = new object();
lock (obj)
{
while (true);
}
由于循环将永远运行,并且循环位于关键部分:
这会占用处理器的所有时间,而不会屈服于另一个线程吗?我相信一旦处理器进入临界区,它就不能被中断,直到它离开临界区,因此锁中的操作是原子的。
这种技术可以用来保证您的应用程序始终有一个核心可以运行,并且永远不会等待吗?
最佳答案
I believe once a processor is in a critical section it cannot be interrupted until it leaves the critical section, so that the operations in the lock are atomic
不,在操作系统级别,线程将被挂起,而另一个线程(无论是否来自另一个进程)将被执行。 操作系统调度程序负责根据线程的状态和优先级为系统中执行的各个线程分配 CPU 时间。
参见MSDN (特别是多任务和调度章节)。
此外,锁定
并不意味着原子
。这只是意味着没有其他线程可以同时运行相同的代码。
关于c# - 关键部分可以无限期地停止处理器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21114347/