Я новичок в библиотеке Boost и пытаюсь реализовать простые потоки производителей и потребителей, которые работают в общей очереди. Мой пример реализации выглядит следующим образом:
#include <iostream>
#include <deque>
#include <boost/thread.hpp>
boost::mutex mutex;
std::deque<std::string> queue;
void producer() 
{
    while (true) {
        boost::lock_guard<boost::mutex> lock(mutex);
        std::cout << "producer() pushing string onto queue" << std::endl;
        queue.push_back(std::string("test"));
    }
}
void consumer()
{
    while (true) {
        boost::lock_guard<boost::mutex> lock(mutex);
        if (!queue.empty()) {
            std::cout << "consumer() popped string " << queue.front() << " from queue" << std::endl;
            queue.pop_front();
        }
    }
}
int main()
{
    boost::thread producer_thread(producer);
    boost::thread consumer_thread(consumer);
    sleep(5);
    producer_thread.detach();
    consumer_thread.detach();
    return 0;
}
Этот код работает так, как я ожидаю, но когда main завершается, я получаю
/usr/include/boost/thread/pthread/mutex.hpp:45:    
    boost::mutex::~mutex(): Assertion `!pthread_mutex_destroy(&m)' failed.
consumer() popped string test from queue
Aborted
(Я не уверен, что результат из consumer имеет значение в этой позиции, но я его оставил.)
Я делаю что-то неправильно в моем использовании Boost?
