我遇到了问题,因为我在我的程序中进行了更改,这可能是由于一个线程调用了自身的连接。在这种情况下会发生什么事?
修改 我做了一些调试,问题是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()
函数时遇到问题,因此我必须创建这些替代函数,以便只有在线程存在时才会调用锁。
答案 0 :(得分:1)
一个帖子本身不能join()
,但是在自己调用joinable()
的帖子上没有任何问题。
所有t.joinable()
所做的都是测试t.get_id() != std::thread::id{}
,因此您调用它的线程没有区别。
答案 1 :(得分:0)
Cameron是对的,我的错误在代码的其他地方,因此这些函数不是必需的,并且锁定正确完成。
@πάνταῥεῖ:我对创建线程之前和之后调用的函数有锁定,所以我不得不把锁放在那里。
PS:还不能发表评论,这就是为什么会有这么多的编辑等等......
谢谢你们