Что происходит при вызове деструктора объекта потока, который ожидает переменную условия?

Я используюSynchronisedQueue общаться между потоками. Я обнаружил, что уничтожение объекта потока, когда присоединяющий поток ожидает переменную условия, приведет к сбою программы. Это можно исправить, позвонивdetach() до разрушения нити. Но мне интересно, что именно происходит, когда поток, ожидающий условную переменную, завершается. Есть ли другой способ использовать условную переменную, чтобы избежать этого?

#include 
#include 
#include 
#include 

template  class SynchronisedQueue {
 public:
  void Enqueue(Type const & data) {
    std::unique_lock lock(mutex_);
    queue_.push(data);
    condition_.notify_one();
  }
  Type Dequeue() {
    std::unique_lock lock(mutex_);
    while (queue_.empty())
      condition_.wait(lock);
    Type result = queue_.front();
    queue_.pop();
    return result; 
  }
 private:
  std::queue queue_;
  std::mutex mutex_;
  std::condition_variable condition_; 
};

class Worker {
public:
  Worker(SynchronisedQueue * queue) : queue_(queue) {}
  void operator()() {
    queue_->Dequeue();    // 

Ответы на вопрос(3)

Ваш ответ на вопрос