原文
通道
是一个可用来连接协程
,实现不同协程
间通信
的并发安全队列
.
cpp
@Test
fun `test know channel`() = runBlocking<Unit> {
val channel = Channel<Int>()
//生产者
val producer = GlobalScope.launch {
var i = 0
while (true) {
delay(1000)
channel.send(++i)
println("send $i")
}
}
//消费者
val consumer = GlobalScope.launch {
while (true) {
val element = channel.receive()
println("receive $element")
}
}
joinAll(producer, consumer)
}
该示例很简单,生产者
协程和消费者
协程通过通道
通信.
C++20
协程有通道
吗?与go
和kotlin
那样的通道
.
答案是:有,就在yalantinglibs
的coro_io
里面.
来看看C++20
协程通道
的用法:
cpp
auto executor = coro_io::get_global_block_executor()->get_asio_executor();
asio::experimental::channel<void(std::error_code, int)> channel(executor, 1000);
co_await coro_io::async_send(ch, 42);
auto [ec, val] = co_await coro_io::async_receive<int>(channel);
assert(val == 42);
创建了个容量为1000
的通道
,后续就可通过该通道
实现协程间
通信了.
这就是C++20
协程通道
,用法和go,kotlin
的通道
类似.