【发布时间】:2021-03-05 19:23:01
【问题描述】:
我正在阅读 spsc_queue 的文档,即使在其他地方阅读了一些内容后,我也不完全相信“无需等待”的含义。
它们在这里到底是什么意思
bool push(T const & t);
将对象 t 推送到环形缓冲区。
注意:线程安全且无需等待
我的意思是同步必须有一些开销。是
some_spscqueue.push(x);
保证花费恒定的时间?它与非线程安全队列相比如何?
PS:别担心,我会测量,但由于我天真无知,我无法想象一个不涉及某种等待的同步机制,我很困惑“无等待”应该告诉什么我。
【问题讨论】:
-
@NeilButterworth 是的,我做到了,但是例如“如果每个操作在操作完成之前算法将采取的步数都有限制,则该算法是无等待的。”我不完全理解这与使用锁以及确保没有死锁的可能性有何不同。
-
原则上,你仍然缺少饥饿 - 无等待算法不能被饿死,但互斥锁很容易被饿死(即,它们通常不会表现出“公平”的调度行为高竞争)。在实践中,互斥体的成本更高(由于停车和服务员队列)。在某些情况下您想要停车,这是一种好处,但排长队可能不是其中之一。
标签: c++ boost nonblocking lock-free wait-free