c++ - 如果 std::thread 对自身调用 joinable 会发生什么?

标签 c++ multithreading std

自从我对程序进行了更改后我遇到了问题,这可能是由于线程本身调用了 joinable。在这种情况下到底发生了什么?

编辑: 我做了一些调试,问题是 Joinable 方法。

std::mutex threadMutex;
std::thread tAudioProcessingThread;

void getLock()
{
    if (tAudioProcessingThread.joinable())
        threadMutex.lock(); 
}

void releaseLock()
{
    if (tAudioProcessingThread.joinable())
        threadMutex.unlock();   
}  

函数 getLock()releaseLock() 从两个现有线程调用。 在创建线程之前,我在调用 threadMutex.lock()threadMutex.unlock() 函数时遇到了问题,所以我不得不创建这些替代函数,以便锁仅在线程存在时被调用。

最佳答案

一个线程本身不能 join(),但是线程本身调用 joinable() 没有错。

t.joinable() 所做的只是测试 t.get_id() != std::thread::id{} 所以你选择哪个线程没有区别从中调用它。

关于c++ - 如果 std::thread 对自身调用 joinable 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26637913/

相关文章:

c++ - 在 C++ 中使用 ioprio_set

xcode - lldb暂停线程,而其他线程继续

c# - Webservice - 线程与异步方法调用

java - 忽略子线程生成的日志

c++ - std::emplace_back 调用 vector 中其他对象的构造函数?

c++ - 跨 OpenMP 线程的 vector 填充

c++ - 从 value_type 获取 key_type

c++ - 单 channel 平均值

c++ - 基于可变参数模板长度的条件成员函数声明

c++ - 如何访问模板类型参数包中的类型索引?