Boost C++ 库

...世界上最受推崇和专业设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

PrevUpHomeNext

结构体模板 spsc_value

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 提供单写/单读值,通过三缓冲区实现

策略

spsc_value 公有成员函数

  1. explicit spsc_value();

    构造一个 spsc_value

    如果配置了 boost::lockfree::allow_multiple_reads<true>,则初始化为默认构造的值

  2. explicit spsc_value(T value);

    构造一个 spsc_value,初始化为某个值

  3. void write(T && value);

    value 写入 spsc_value

    [Note] 注意

    线程安全且无等待

    要求

    只允许一个线程向 spsc_value 写入数据

    后置条件

    对象将被写入 spsc_value

  4. void write(const T & value);

    value 写入 spsc_value

    [Note] 注意

    线程安全且无等待

    要求

    只允许一个线程向 spsc_value 写入数据

    后置条件

    对象将被写入 spsc_value

  5. bool read(T & ret);

    读取 spsc_value 的内容

    [Note] 注意

    线程安全且无等待

    要求

    只允许一个线程向 spsc_value 写入数据

    后置条件

    如果读取操作成功,对象将被复制到 ret

    返回值

    true,如果读取操作成功,如果 spsc_value 配置了 boost::lockfree::allow_multiple_reads<false> 且没有可读取的值,则返回 false

  6. std::optional< T > read(uses_optional_t);

    读取 spsc_value 的内容,返回一个可选值

    [Note] 注意

    线程安全且无等待

    要求

    只允许一个线程向 spsc_value 写入数据

    返回值

    如果成功,则返回带有值的 std::optional,如果 spsc_value 配置了 boost::lockfree::allow_multiple_reads<false> 且没有可读取的值,则返回 std::nullopt

  7. template<typename Functor> bool consume(Functor && f);

    通过仿函数消耗值

    spsc_value 读取元素,并将仿函数应用于该对象

    [Note] 注意

    线程安全且非阻塞,如果仿函数是线程安全且非阻塞的

    返回值

    true,如果元素被消耗


PrevUpHomeNext