是boost::线程线程安全的
Is boost::thread thread-safe?
是否为boost::thread-object线程安全?我是否应该将boost::thread的成员方法(例如join)的调用锁定为线程安全?
第1版:请不要为我的目的而烦恼。你能简单地回答这个问题吗?
第2版(适用于对第1版不满意的用户):我的目的是:将一个过程视为线程的程序,一个过程停止该线程。线程过程是while循环检查条件是否继续。Stop过程将条件设置为FALSE,并等待线程结束(联接),然后执行一些其他操作。关键是停止过程可以调用多个线程。
但我的问题是一般性的,考虑下十亿个线程同时调用一个线程对象的成员方法,如get_id()、native_handle()等。
连接一个线程只能从一个其他线程(最好是启动它的线程)完成。在这种情况下,线程安全没有意义
好的,我实际上已经浏览了boost::thread:的源代码
void thread::join()
{
detail::thread_data_ptr const local_thread_info=(get_thread_info)();
if(local_thread_info)
{
bool do_join=false;
{
unique_lock<mutex> lock(local_thread_info->data_mutex);
while(!local_thread_info->done)
{
local_thread_info->done_condition.wait(lock);
}
do_join=!local_thread_info->join_started;
if(do_join)
{
local_thread_info->join_started=true;
}
else
{
while(!local_thread_info->joined)
{
local_thread_info->done_condition.wait(lock);
}
}
}
if(do_join)
{
void* result=0;
BOOST_VERIFY(!pthread_join(local_thread_info->thread_handle,&result));
lock_guard<mutex> lock(local_thread_info->data_mutex);
local_thread_info->joined=true;
local_thread_info->done_condition.notify_all();
}
if(thread_info==local_thread_info)
{
thread_info.reset();
}
}
}
看起来是的,它是线程安全的。
boost::thread
不是线程安全的。
相关文章:
- 如何将元素添加到数组的线程安全函数?
- C++中的线程安全删除
- 在std::thread中,joinable()然后join()线程安全吗
- 在c++队列中使用pop和visit实现线程安全
- 以线程安全的方式调用"QQuickPaintedItem::updateImage(const QImage&image)"(no QThread)
- 全局变量 多读取器 一个写入器多线程安全?
- 共享队列的线程安全
- boost::文件系统::recursive_directory_iterator多线程安全
- 以线程安全的方式转换 C/C++ 中时区名称字符串的时区偏移量
- 线程安全运算符<<
- 如何使缓存线程安全
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 提升精神 V2 Qi 语法线程安全吗?
- asio 链对象线程安全吗?
- 线程安全队列 c++
- 提供对不同类型的数据(建议、代码审查)的线程安全访问的类
- 如何以线程安全的方式更改目录?
- 线程安全的引用计数队列C++
- 析构函数和线程安全
- 适用于大型数组的无复制线程安全环形缓冲区