RMVL  2.4.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到
rm::RingBufferSlotSHM< T, Capacity, typename > 模板类 参考

基于共享内存的无锁 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) 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
SHMBaseoperator= (const SHMBase &)=delete
SHMBaseoperator= (SHMBase &&)=default
void * data () noexcept
 获取共享内存映射指针
const void * data () const noexcept
 获取共享内存映射指针
bool isCreator () const noexcept
 是否为创建者

额外继承的成员函数

静态 Public 成员函数 继承自 rm::SHMBase
static void destroy (std::string_view name)
 显式移除指定名称的共享内存对象,Windows 平台下调用该函数无效果

详细描述

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)
noexcept

向缓冲区中写入一个值(非阻塞)

参数
[in]value要写入的值
返回
如果成功写入则返回 true,如果缓冲区已满则返回 false
函数调用图: