| RMVL 2.4.0 Robotic Manipulation and Vision Library

载入中...
搜索中...
未找到
Public 成员函数 | 所有成员列表
rm::RingBufferSlotSHM< T, Capacity, typename > 模板类 参考
数据 IO 与通信模块 » 进程间通信

基于共享内存的无锁 MPMC（多生产者多消费者）环形缓冲区 更多...

`#include <rmvl/io/ipc.hpp>`

类 rm::RingBufferSlotSHM< T, Capacity, typename > 继承关系图:
rm::RingBufferSlotSHM< T, Capacity, typename > 的协作图:

## Public 成员函数
| RingBufferSlotSHM (std::string_view name)
| 构造或连接到一个 MPMC 环形缓冲区
bool | write (const T &value, bool overwrite=false) noexcept
| 向缓冲区中写入一个值（非阻塞）
bool | read (T &value) noexcept
| 从缓冲区读取一个值（非阻塞）
Public 成员函数 继承自 rm::SHMBase
| SHMBase (std::string_view name, std::size_t size)
| 创建或打开共享内存对象并映射到当前进程地址空间
| ~SHMBase ()
| SHMBase (const SHMBase &)=delete
| SHMBase (SHMBase &&)=default
SHMBase & | operator= (const SHMBase &)=delete
SHMBase & | operator= (SHMBase &&)=default
void * | data () noexcept
| 获取共享内存映射指针
const void * | data () const noexcept
| 获取共享内存映射指针
bool | isCreator () const noexcept
| 是否为创建者

## 详细描述

template<typename T, size_t Capacity, typename = std::enable_if_t<std::is_trivially_copyable_v<T>>>
class rm::RingBufferSlotSHM< T, Capacity, typename >

基于共享内存的无锁 MPMC（多生产者多消费者）环形缓冲区

模板参数

  T | 共享数据类型，必须是可平凡复制类型
  Capacity | 环形缓冲区容量，必须是 2 的幂

## 构造及析构函数说明

## ◆ RingBufferSlotSHM()

template<typename T, size_t Capacity, typename Enable>

rm::RingBufferSlotSHM< T, Capacity, Enable >::RingBufferSlotSHM | ( | std::string_view | name | ) |

构造或连接到一个 MPMC 环形缓冲区

参数

  [in] | name | 共享内存的唯一名称

函数调用图:

## 成员函数说明

## ◆ read()

template<typename T, size_t Capacity, typename Enable>

bool rm::RingBufferSlotSHM< T, Capacity, Enable >::read | ( | T & | value | ) |
| noexcept

从缓冲区读取一个值（非阻塞）

参数

  [out] | value | 读取到的值

返回
  如果成功读取则返回 true，如果缓冲区为空则返回 false

函数调用图:

## ◆ write()

template<typename T, size_t Capacity, typename Enable>

bool rm::RingBufferSlotSHM< T, Capacity, Enable >::write | ( | const T & | value,
|  | bool | overwrite = false )
| noexcept

向缓冲区中写入一个值（非阻塞）

参数

  [in] | value | 要写入的值
  [in] | overwrite | 是否在缓冲区满时覆盖旧数据，默认为 false

返回
  如果成功写入则返回 true，如果缓冲区已满则返回 false

函数调用图: