如果std :: thread调用自身可连接会发生什么?

时间:2014-10-29 18:22:17

标签: c++ multithreading std

我遇到了问题,因为我在我的程序中进行了更改,这可能是由于一个线程调用了自身的连接。在这种情况下会发生什么事?

修改 我做了一些调试,问题是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()函数时遇到问题,因此我必须创建这些替代函数,以便只有在线程存在时才会调用锁。

2 个答案:

答案 0 :(得分:1)

一个帖子本身不能join(),但是在自己调用joinable()的帖子上没有任何问题。

所有t.joinable()所做的都是测试t.get_id() != std::thread::id{},因此您调用它的线程没有区别。

答案 1 :(得分:0)

Cameron是对的,我的错误在代码的其他地方,因此这些函数不是必需的,并且锁定正确完成。

@πάνταῥεῖ:我对创建线程之前和之后调用的函数有锁定,所以我不得不把锁放在那里。

PS:还不能发表评论,这就是为什么会有这么多的编辑等等......

谢谢你们