如果std::线程在自身上调用joinable会发生什么

What happens if a std::thread calls joinable on itself?

本文关键字:joinable 什么 调用 线程 std 如果      更新时间:2023-10-16

由于我在程序中进行了更改,我遇到了问题,这可能是由于线程本身调用了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{},所以从哪个线程调用它没有什么区别。

Cameron是对的,我的错误在代码的其他地方,所以这些函数是不必要的,锁定也可以正确完成。

@πάγταῥεῖ:我在创建线程之前和之后调用的函数上都有锁,所以我必须把锁放在那里。

PS:还不能评论,这就是为什么有这么多编辑等等…

谢谢各位