librf
Public 成员函数 | 所有成员列表
resumef::channel_t< _Ty, _Optional, _OptimizationThread > 模板结构体 参考

可传递数据的模板信号量。 更多...

Public 成员函数

 channel_t (size_t cache_size=1)
 构造函数。 更多...
 
size_t capacity () const noexcept
 获得缓存数量。
 
read_awaiter operator co_await () const noexcept
 在协程中从channel_t里读取一个数据。 更多...
 
read_awaiter read () const noexcept
 在协程中从channel_t里读取一个数据 更多...
 
template<class U >
write_awaiter operator<< (U &&val) const noexcept(std::is_move_constructible_v< U >)
 在协程中向channel_t里写入一个数据。 更多...
 
template<class U >
write_awaiter write (U &&val) const noexcept(std::is_move_constructible_v< U >)
 在协程中向channel_t里写入一个数据。 更多...
 

详细描述

template<class _Ty = bool, bool _Optional = !std::is_trivial_v<_Ty>, bool _OptimizationThread = false>
struct resumef::channel_t< _Ty, _Optional, _OptimizationThread >

可传递数据的模板信号量。

备注
不支持数据类型为void的特例化。
参数
_Ty传递的数据类型。要求此类型至少支持移动构造和移动赋值。
_Optional内部是否采用std::optional<>来存数据。
默认不是POD类型则采用std::optional<>。如果channel缓存的元素不能凭空产生,或者产生代价较大,则推荐将此参数设置为true,从而减小不必要的开销。
_OptimizationThread针对多线程优化。目前此算法提升效率不稳定,需要自行根据实际情况决定。

构造及析构函数说明

◆ channel_t()

template<class _Ty = bool, bool _Optional = !std::is_trivial_v<_Ty>, bool _OptimizationThread = false>
resumef::channel_t< _Ty, _Optional, _OptimizationThread >::channel_t ( size_t  cache_size = 1)

构造函数。

参数
cache_size缓存的数量。0 表示内部无缓存。

成员函数说明

◆ operator co_await()

template<class _Ty = bool, bool _Optional = !std::is_trivial_v<_Ty>, bool _OptimizationThread = false>
read_awaiter resumef::channel_t< _Ty, _Optional, _OptimizationThread >::operator co_await ( ) const
noexcept

在协程中从channel_t里读取一个数据。

参见
参考read()函数
返回
[co_await] value_type

◆ operator<<()

template<class _Ty = bool, bool _Optional = !std::is_trivial_v<_Ty>, bool _OptimizationThread = false>
template<class U >
write_awaiter resumef::channel_t< _Ty, _Optional, _OptimizationThread >::operator<< ( U &&  val) const
noexcept

在协程中向channel_t里写入一个数据。

参见
参考write()函数

◆ read()

template<class _Ty = bool, bool _Optional = !std::is_trivial_v<_Ty>, bool _OptimizationThread = false>
read_awaiter resumef::channel_t< _Ty, _Optional, _OptimizationThread >::read ( ) const
noexcept

在协程中从channel_t里读取一个数据

如果没有写入数据,则会阻塞协程。

备注
无缓冲的时候,先读后写,不再抛channel_exception异常。这是跟channel_v1的区别。
在非协程中也可以使用。如果不能立即读取成功,则会阻塞线程。
但如此用法并不能获得读取的结果,仅仅用作同步手段。
返回
[co_await] value_type

◆ write()

template<class _Ty = bool, bool _Optional = !std::is_trivial_v<_Ty>, bool _OptimizationThread = false>
template<class U >
write_awaiter resumef::channel_t< _Ty, _Optional, _OptimizationThread >::write ( U &&  val) const
noexcept

在协程中向channel_t里写入一个数据。

在没有读操作等待时,且数据缓冲区满的情况下,则会阻塞协程。

备注
在非协程中也可以使用。如果不能立即写入成功,则会阻塞线程。
参数
val写入的数据。必须是可以成功构造_Ty(val)的类型。
返回
[co_await] void

该结构体的文档由以下文件生成: