繁体   English   中英

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

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

由于我在程序中进行了更改,因此出现了问题,这可能是由于线程本身调用了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:现在还不能发表评论,这就是为什么编辑如此之多等等的原因。

多谢你们

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM