我正在阅读spsc_queue的文档,甚至在其他地方阅读之后,我并不完全相信"无等待"的含义。
这里究竟是什么意思
bool push(T const& t);
将对象t推送到环形缓冲区。
注意:线程安全且无需等待
我的意思是必须有一些同步开销。是
some_spscqueue.push(x);
保证花费不间断的时间?它与非线程安全队列相比如何?
PS:不要担心,我要测量,但由于我的天真无知,我只能想象一个不涉及某种等待的同步机制,我很困惑什么"等待&#34 ;应该告诉我。答案 0 :(得分:0)
并发数据对象的无等待实现可以保证任何进程都可以在有限步骤中完成任何操作,而不管其他进程的执行速度如何。
(来自Herlihy文章的abstract)。
另请参阅Wikipedia以及您通过键入"等待免费"立即找到的所有其他资源。进入搜索引擎。
所以等待并不意味着没有延迟,这意味着你永远不会进入阻塞等待状态,并且无法无限期阻止和/或饿死。
换句话说, wait 具有您的线程停放的特定技术含义,并且不会执行任何指令,直到某些东西被唤醒。如果它从未被唤醒,或者如果它被唤醒但总是发现它无法继续并且必须等待,那么你的线程就会被饿死而无法取得进展。
每个操作都有一些延迟,而且没有等待的 。
它几乎肯定比完全不同步的容器更昂贵,因为你还在做额外的工作(假设你真的只从一个线程访问容器)。
答案 1 :(得分:0)
"将对象推送到环形缓冲区"指的是实现队列的数组缓冲区的类型。这可能使用圆形数组来实现,以将对象存储在队列中。例如见:
https://en.wikipedia.org/wiki/Circular_buffer
和
http://opendatastructures.org/ods-python/2_3_ArrayQueue_Array_Based_.html