我在修改程序後遇到問題,可能是由於線程調用本身可以加入。在這種情況下究竟發生了什麼?如果一個std ::線程調用本身可以加入,會發生什麼?
編輯: 我做了一些調試,並problme是可連接的方法。
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()
函數時遇到問題,所以我不得不做出這些替代函數,以便在線程存在時僅調用鎖。
很可能是未定義或死鎖...... – Soren 2014-10-29 18:27:37
如果沒有_complete_測試用例,我們無法推測答案。 – 2014-10-29 18:32:43
要正確處理鎖定,您應該考慮使用['lock_guard'](http://en.cppreference.com/w/cpp/thread/lock_guard)',而不是在那裏滾動自己的東西。順便說一句,如果線程沒有真正運行,爲什麼你打擾鎖定/解鎖互斥體?!? – 2014-10-29 18:39:52