赞
踩
原文
通道
是一个可用来连接协程
,实现不同协程
间通信
的并发安全队列
.
@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
协程通道
的用法:
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
的通道
类似.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。