join()抛出thread_resource_error?

时间:2012-10-09 09:03:52

标签: c++ multithreading boost

我遇到join()对象上调用boost::thread会引发thread_resource_error异常的情况。看documentation,没有提到这种方法会引发这样的例外。

我不太确定从哪里开始调试。关于可能导致这种情况的任何建议?

1 个答案:

答案 0 :(得分:1)

查看boost源代码,我发现了以下内容:

void thread::join()
{
    if (this_thread::get_id() == get_id())
    {
        boost::throw_exception(thread_resource_error(system::errc::resource_deadlock_would_occur, "boost thread: trying joining itself"));
    }
    detail::thread_data_ptr local_thread_info=(get_thread_info)();
    if(local_thread_info)
    {
        this_thread::interruptible_wait(local_thread_info->thread_handle,detail::timeout::sentinel());
        release_handle();
    }
}

所以基本上它有一些未记录的行为,如果一个线程试图加入自己,它会抛出一个thread_resource_error