gpt4 book ai didi

c - 轮询锁是实现关键部分的正确方法吗?

转载 作者:太空狗 更新时间:2023-10-29 15:59:17 26 4
gpt4 key购买 nike

如果我有临界区,我必须实现锁定它的方法。我看到了以下变体:

while(lock)
{
//do nothing
}
lock = true;
// code of critical section
lock = false;

但是,我对此持怀疑态度,因为理论上,多个线程可以执行while(lock)(检查并查看它是否为false),并一起进入临界区,因为 while(lock)lock = true; 不是在一个连续的 block 中执行的。我错了吗?或者这确实是一种不安全的方法?

最佳答案

你是对的——这不安全。没什么可说的了。

编辑:不,关于这个构造,真的,真的没有太多可说的了。这不是自旋锁,也不太像自旋锁。对于自旋锁,您需要类似这样的内容:

// note: incomplete, not reentrant, not intended for real use
atomic_type spin_lock = 0;

// enter the spin lock:
int prev_value;

while ((prev_value = test_and_set(&spin_lock, 1)) != 0 || spin_lock != 1)
;
// code of critical section

// release the spin lock:
test_and_set(&spin_lock, 0);

这里很重要的一点是,要进入自旋锁,需要获取之前的值并原子地设置新值。然后您必须验证对锁的写入是否将其从“不拥有”状态更改为“拥有”状态。

关于c - 轮询锁是实现关键部分的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10690051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com