我正在阅读 spsc_queue 的文档即使在其他地方阅读了一些内容之后,我也不完全相信“免等待”的含义。
它们到底是什么意思
bool push(T const & t);
Pushes object t to the ringbuffer.
Note: Thread-safe and wait-free
我的意思是同步必须有一些开销。是
some_spscqueue.push(x);
保证花费一定的时间?它与非线程安全队列相比如何?
PS:别担心,我要测量了,但由于我的天真无知,我无法想象一个不涉及某种等待的同步机制,我很困惑“无等待”应该告诉什么我。
最佳答案
A wait-free implementation of a concurrent data object is one that guarantees that any process can complete any operation in a finite number of steps, regardless of the execution speeds of the other processes.
(来自 Herlihy 文章的 abstract)。
另见 Wikipedia ,以及您通过在搜索引擎中输入“等待免费”立即找到的所有其他资源。
所以免等待并不意味着没有延迟,它意味着您永远不会进入阻塞等待状态,并且不能无限期地被阻塞和/或饥饿.
换句话说,wait 具有特定的技术含义,即您的线程要么停放(并且在被唤醒之前不执行任何指令),要么在循环中等待某些外部条件得到满足(例如自旋锁)。如果它一直没有被唤醒,或者被唤醒但总是发现无法继续,不得不再次等待,或者如果循环永远不会退出,那么你的线程就饿死了,无法取得进展.
每个操作都有一些延迟,而无等待并没有说明任何是什么。
How does it compare to a non-thread safe queue?
它几乎肯定会比完全不同步的容器更昂贵,因为您仍在做额外的工作(假设您真的只从单个线程访问容器)。
关于c++ - boost::lockfree 中的 "wait-free"到底是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45618006/