问题标签 [spinlock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
16382 浏览

linux-kernel - 为什么自旋锁在单处理器(unicore)系统中不起作用?

我知道自旋锁与自旋一起工作,存在不同的内核路径并且内核是抢占式的,那么为什么自旋锁在单处理器系统中不起作用?(例如,在 Linux 中)

0 投票
1 回答
1410 浏览

linux - 如果中断处理程序开始旋转会发生什么?

我正在关注 Linux 设备驱动程序。当它引入自旋锁时,它给出了以下示例:

您的驱动程序正在执行并且刚刚取出一个控制对其设备的访问的锁。当锁被持有时,设备会发出一个中断,这会导致你的中断处理程序运行。中断处理程序在访问设备之前也必须获得锁。在中断处理程序中取出自旋锁是合法的事情。这是自旋锁操作不休眠的原因之一。但是如果中断例程与最初取出锁的代码在同一个处理器中执行会发生什么?当中断处理程序正在旋转时,非中断代码将无法运行以释放锁。该处理器将永远旋转。

我不明白为什么如果中断处理程序正在旋转,则无法执行非中断代码。

是不是因为中断处理程序中的例程不能被抢占?如果是这样,是不是说中断例程必须是原子的?

0 投票
1 回答
5041 浏览

linux - linux在杀死进程时是否释放自旋锁/信号量?

如果一个进程持有一些自旋锁或信号量,并意外退出(例如,被 linux 杀死),linux 会正确释放这些锁吗?如果linux不做这个工作,为什么?

0 投票
1 回答
733 浏览

linux - 禁用调度程序以减少自旋锁上的 cpu 时间

在 linux 中,在 kvm 环境中,当 VM 中的某个进程锁定某个资源并被抢占时,需要该锁定资源的 VM 的其他进程将花费时间进行自旋锁。当分配给处理器时,该进程将解锁资源。

我想禁用调度程序预清空,直到进程解锁资源。这将减少自旋锁上的 cpu 时间。

如何实现上述?IE

  1. 如何找出VM中的进程是否锁定了某些资源?

  2. 那么如何通知调度器在资源解锁之前不要抢占进程呢?

如果在任何地方错了,请纠正我..

提前致谢..

0 投票
2 回答
506 浏览

c# - 什么时候应该和不应该使用这个 C# 实用程序类来通过 Interlocked 控制线程

我试图了解如何编写此类背后的逻辑,以及何时应该和不应该使用它。任何见解将不胜感激

更新:我在我的源代码中找到了一个示例用法......这表明如何使用上述对象,虽然我不明白“为什么”

0 投票
1 回答
1808 浏览

linux-device-driver - 解决自旋锁问题

在 Linux 设备驱动程序中。当它引入自旋锁时,它给出了以下示例:

您的驱动程序正在执行并且刚刚取出一个控制对其设备的访问的锁。当锁被持有时,设备会发出一个中断,这会导致你的中断处理程序运行。中断处理程序在访问设备之前也必须获得锁。在中断处理程序中取出自旋锁是合法的事情。这是自旋锁操作不休眠的原因之一。但是如果中断例程与最初取出锁的代码在同一个处理器中执行会发生什么?当中断处理程序正在旋转时,非中断代码将无法运行以释放锁定。该处理器将永远旋转。

如何解决这个问题?使用信号量?请帮忙。

0 投票
1 回答
2311 浏览

c++ - pthread_spinlock 和 boost::smart_ptr::spinlock 的区别?

我在以下位置找到了以下自旋锁代码boost::smart_ptr

因此,如果我正确理解这一点,当锁被争用时,传入线程将呈指数级回退,首先疯狂旋转,然后暂停,然后产生其时间片的剩余部分,最后在睡眠和产生之间翻转。

我还找到了glibc pthread_spinlock实现,它使用程序集来执行锁定。

我承认我对汇编的理解不是很好,所以我不完全理解这里发生了什么。(有人可以解释一下这是在做什么吗?)

但是,我对 boost spinlock 和 glibc pthread_spinlock 进行了一些测试,当内核多于线程时,boost 代码的性能优于 glibc 代码

另一方面,当线程多于内核时,glibc 代码更好

为什么是这样?这两个自旋锁实现之间有什么区别,使它们在每种情况下的表现都不同?

0 投票
1 回答
160 浏览

pthreads - 共享计数器使用自旋锁提供不同的值

我有以下代码:

PRINT定义为 1 时,我最后得到正确的计数器值:

如果我设为PRINT0,我会得到以下结果(多次运行):

关于发生了什么的任何见解?为什么当我启用打印语句时,我的结果(始终)正确,但我禁用它并且我的计数器没有达到目标值?我已经使用了很多 pthread,但在直接使用自旋锁方面并不是很有经验。

任何帮助或反馈表示赞赏。

0 投票
1 回答
1418 浏览

.net - 自旋锁抛出 SynchronizationLockException

我正在尝试使用 SpinLock,但是当我调用 SpinLock.Exit() 时,即使是单线程控制台应用程序中的这个最基本的代码也会引发以下异常

这是整个源代码...

0 投票
2 回答
3084 浏览

linux - 为什么 Linux 内核(非 SMP)中的自旋锁无操作?

我已经读了很长一段时间了,但对我来说没有意义。可能是因为我对这一切都很陌生,仍然不了解一些内核概念。

这就是我想出的(没有错误或 NULL 处理,只是为了这个问题):

内核自旋锁在内核线程内执行,这是抢占式的。