boost::lockfree::spsc_value
// In header: <boost/lockfree/spsc_value.hpp> template<typename T, typename... Options> struct spsc_value { // public member functions explicit spsc_value(); explicit spsc_value(T); void write(T &&); void write(const T &); bool read(T &); std::optional< T > read(uses_optional_t); template<typename Functor> bool consume(Functor &&); };
spsc_value 提供单写/单读值,通过三缓冲区实现
策略
boost::lockfree::allow_multiple_reads,默认为 boost::lockfree::allow_multiple_reads<false>
如果允许多次读取,写入 spsc_value 的值可以被多次读取,但不能从实例中移出。如果不允许多次读取,则该类作为单元素队列工作,写入时覆盖
spsc_value
公有成员函数explicit spsc_value();
构造一个 spsc_value
如果配置了 boost::lockfree::allow_multiple_reads<true>,则初始化为默认构造的值
explicit spsc_value(T value);
构造一个 spsc_value,初始化为某个值
void write(T && value);
将 value
写入 spsc_value
![]() |
注意 |
---|---|
线程安全且无等待 |
要求 |
只允许一个线程向 spsc_value 写入数据 |
后置条件 |
对象将被写入 spsc_value |
void write(const T & value);
将 value
写入 spsc_value
![]() |
注意 |
---|---|
线程安全且无等待 |
要求 |
只允许一个线程向 spsc_value 写入数据 |
后置条件 |
对象将被写入 spsc_value |
bool read(T & ret);
读取 spsc_value 的内容
![]() |
注意 |
---|---|
线程安全且无等待 |
要求 |
只允许一个线程向 spsc_value 写入数据 |
后置条件 |
如果读取操作成功,对象将被复制到 |
返回值 |
|
std::optional< T > read(uses_optional_t);
读取 spsc_value 的内容,返回一个可选值
![]() |
注意 |
---|---|
线程安全且无等待 |
要求 |
只允许一个线程向 spsc_value 写入数据 |
返回值 |
如果成功,则返回带有值的 |
template<typename Functor> bool consume(Functor && f);
通过仿函数消耗值
从 spsc_value 读取元素,并将仿函数应用于该对象
![]() |
注意 |
---|---|
线程安全且非阻塞,如果仿函数是线程安全且非阻塞的 |
返回值 |
|