У меня возникают проблемы с тех пор, как я внес изменения в свою программу, и это может быть связано с тем, что поток вызывает соединение. Что происходит в этой ситуации?Что произойдет, если std :: thread вызывает joinable на себе?
EDIT: Я сделал некоторую отладку, и проблема была объединена.
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
Мы не можем отдать ответ без тестового теста _complete_. –
Чтобы правильно обрабатывать блокировки, вы должны использовать ['lock_guard'] (http://en.cppreference.com/w/cpp/thread/lock_guard) вместо того, чтобы загружать свой собственный материал там. BTW, если поток фактически не работает, почему вы беспокоитесь о блокировке/разблокировке мьютекса?!? –