【发布时间】:2021-12-27 21:14:30
【问题描述】:
我将 asio 用于异步 io,但有时我想“逃离”异步世界并将我的数据恢复到常规同步世界。
例如,假设我有一个std::deque<string> _data 正在我的异步进程中使用(在一个始终在后台运行的单个线程中),并且我已经创建了异步函数来读取/写入它。
从另一个线程同步读取这个双端队列的“自然”方式是什么? 到目前为止,我已经使用原子来做到这一点,但这感觉有点“错误”。 例如:
std::string getDataSync()
{
std::atomic<int> signal = 0;
std::string str;
asio::post(io_context, [this, &signal, &str] {
str = _data.front();
_data.pop_front();
signal = 1;
});
while(signal == 0) { }
return str;
}
- 这样做可以吗?
- asio 是否提供更清洁的方式来执行此类操作?
谢谢
【问题讨论】:
-
同步是指阻塞吗?
-
@JohnFilleau 是的
标签: c++ boost-asio