因此,假设我有类似于以下内容的代码:

var obj = new object();
lock (obj)
{
    while (true);
}

由于循环将永远运行,并且由于循环处于关键部分,因此:

这会占用处理器的全部时间,而不会屈服于另一个线程吗?我相信,一旦处理器进入关键部分,就不能中断它,直到它离开关键部分为止,这样锁中的操作才是原子的。

可以使用这种技术来确保您的应用程序始终具有可运行的核心,并且永不等待吗?

最佳答案



不,在操作系统级别,该线程将被挂起,而将执行另一个线程(是否来自另一个进程)。
操作系统调度程序负责根据其状态和优先级为系统中执行的各个线程分配CPU时间。

请参见MSDN(尤其是多任务和调度章节)。

另外,lock并不意味着atomic。这仅意味着没有其他线程可以同时运行相同的代码。

关于c# - 关键部分能否无限期地拖延处理器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21114347/

10-10 12:36