Ce n'mutex lock échouer avec l'argument invalide veux dire?

Ce code est appelé dans mon processus principal et compile bien, mais lors de l'exécution jette toujours l'erreur ci-dessous.

bounded_buffer<MyData> bb(200);
Producer<bounded_buffer<MyData> > producer(&bb);

boost::thread produce(producer); //throws on this line

Voici l'erreur qui apparaît lors de l'exécution.

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::lock_error> >'  
what():  boost: mutex lock failed in pthread_mutex_lock: Invalid argument

Le code de la classe de bounded_buffer' est exactement comme indiqué sur ce coup de pouce exemple de page ... http://www.boost.org/doc/libs/1_55_0/libs/circular_buffer/example/circular_buffer_bound_example.cpp

J'ai trouvé cette page qui semble montrer exactement la même chose, mais j'ai été incapable de comprendre la réponse donnée. Boost scoped_lock a échoué à chaque fois

Mise à jour:
Voici ce que Producteur::operator() n'est actuellement lorsque le foncteur est appelé. Et mes intentions pour ce que je veux ce thread.

void operator() () {
    //init();
    //read();

    //this line just a test
    m_container->push_front(value_type());

    /*Eventually will do the following:
    while (1) {
         read_from_usb_device();
         //then store data in global buffer (bb)
    }*/
}
Est-il vraiment jeter sur cette ligne? La création du thread ne pas utiliser le mutex. Que faites-vous après la création du thread? Je soupçonne bb est détruit alors que le thread est toujours en cours d'exécution.
Je ne vois pas le rejoindre sur le fil. Êtes-vous sûr que bb n'est pas hors de portée?
Si je commente la ligne thread, je n'ai pas cette erreur. La surcharge de l'opérateur() actuellement présente des données sur un tampon global (bb), mais finira par exécuter une boucle de lecture des données à partir d'un périphérique.
Vous n'obtenez pas l'erreur car il ne sera pas démarrer le thread à tous. Cela ne signifie pas que l'exception est levée.
Je voulais savoir ce que vous faites après boost::thread produce(producer);?

OriginalL'auteur Ender | 2015-05-07