gpt4 book ai didi

c# - 无锁并发队列

转载 作者:行者123 更新时间:2023-11-30 13:27:02 24 4
gpt4 key购买 nike

此代码片段来自于 here 给出的 ConcurrentQueue 实现.

internal bool TryPeek(out T result) 
{
result = default(T);
int lowLocal = Low;
if (lowLocal > High)
return false;
SpinWait spin = new SpinWait();
while (m_state[lowLocal] == 0)
{
spin.SpinOnce();
}
result = m_array[lowLocal];
return true;
}

真的是无锁而不是自旋吗?

最佳答案

旋转是一把锁。这在 MSDN 中说明, Wikipedia和许多其他资源。这与文字无关。无锁是一种保证。这并不意味着代码不应该使用 lock 语句。算法是lock-free如果有保证全系统的进展。我看不出这段代码和使用锁的代码有什么区别。唯一的区别是自旋使用忙等待和线程让出,而不是将线程置于 sleep 模式。我看不出这如何保证系统范围的进程,所以我个人认为这不是无锁实现。至少没有这个功能。

关于c# - 无锁并发队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164408/

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