c# - 关键部分可以无限期地停止处理器吗?

标签 c# multithreading locking memory-fences

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

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/

相关文章:

c# - 将命令行参数传递给使用 DotNetZip 创建的 SFX

c# - 您可以在类型上而不是在类型的实例上拥有扩展方法吗?

linux - 如何从多线程 C++ Linux 应用程序安全地运行 shell 脚本?

ios - 在 Objective-C 中锁定一个实例变量

java - 在单元测试中启动新的 JVM

带有常量的 C# 泛型

c# - DataGrid ComboBox 第一次点击时没有选中项

c++ - 为什么并行执行 Tcl_ExprDouble 的独立 Tcl 解释器需要互斥体?

java - 使用swing在java中计算和打印时间

c - 锁定 OMP 区域