thread.join()
не приводит к завершению потока, а ожидает окончания потока.Поток несет ответственность за завершение своего выполнения, например, путем периодической проверки определенного условия, например, флага.
У вас уже есть флаг atomic
bReading
, который, по-видимому, заставляет потоквыход.
if (queueInput.empty()) {
mtxQueueInput.unlock();
if (bReading.load())
continue;
else
break; // thread will exit when queue is empty and bReading == false
Так что все, что вам нужно, это установить bReading = false
во внешнем потоке перед вызовом thread.join()
.
bReading = false;
reader.join();
Обратите внимание, что bReading.store(false);
внутри вашей темы не будет иметь никакого эффекта.
Примечание: вам не нужно вызывать atomic.load()
и atomic.store()
, вы можете просто использовать их в своем коде, который будет вызывать load()
и store()
неявно.