c++ - boost::lockfree 中的 "wait-free"到底是什么意思?

标签 c++ boost nonblocking lock-free wait-free

我正在阅读 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/

相关文章:

c++ - Boost.Thread 在 VS2010 中抛出 bad_alloc 异常

python:非阻塞子进程,检查标准输出

c++ - Visual Studio 2010 - 优化大小或速度

c++ - std::make_shared 的奇怪行为

c++ - 使用 gcc/g++ 编译器编译 c++

c++ - boost::fast_pool_allocator 使 std::forward_list 变慢

c++ - 将二进制值转换为十六进制值(32 位)

c++ - boost Asio 和 OpenSSL 1.1.0

java - 每个 SelectionKey(或 SelectionKeyImpl)是否都有一个可供我使用的唯一标识符 (id)?

c - 非阻塞套接字和io