是boost::线程线程安全的

Is boost::thread thread-safe?

本文关键字:线程 安全 boost      更新时间:2023-10-16

是否为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不是线程安全的。