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

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

- librf/src/channel_v2.h