【发布时间】:2019-01-22 09:37:52
【问题描述】:
给定一个boost::asio::io_service io,在启动io.run() 的线程以外的线程上调用io.post(...) 是否安全?
例如:
boost::asio::io_service io;
void f()
{
/* do something */
io.post(&f);
}
void g()
{
/* do something else */
io.post(&g)
}
int main()
{
std::thread t1(&f);
std::thread t2(&g);
io.run();
t1.join();
t2.join();
return 0;
}
我假设io_service 使用某种内部数据结构(例如队列)并且发布会改变这种数据结构(例如推入队列)。我担心的是数据结构可能是线程安全的,也可能不是线程安全的。
我四处搜索并没有找到这个问题的直接答案,尽管我所看到的一切似乎都表明post() 是线程安全的(即原子的)。有人可以验证吗?
【问题讨论】:
标签: c++ thread-safety boost-asio atomic