Voila typiquement le code que je souhaiterais faire tourner.... Parce qu'un boost::mutex est non copiable, comment je fais pour utiliser un objet thread safe dans un boost::thread ? Ma soltion (que je ne donne pas encore) cause un assert à l'execution : assert généré au sein du fichier source mutex.impl.
Merci de votre aide.
Code :
- #include"windows.h"
- #include"boost/thread/thread.hpp"
- using namespace boost;
- #include<cassert>
- #include<iostream>
- using namespace std;
- typedef mutex::scoped_lock lock;
- // une classe thread safe basée sur un mutex BOOST
- struct value
- {
- void set( bool const & arg )
- {
- lock lk( mtx );
- val = arg;
- }
- bool get()
- {
- lock lk( mtx );
- return val;
- }
- private:
- bool val;
- mutex mtx;
- };
- // f crée une instance de la classe value et l'utilise...
- struct f
- {
- void operator()()
- {
- v.set( true );
- Sleep(1000);
- assert( v.get() == true );
- v.set( false );
- Sleep(1000);
- assert( v.get() == false );
- }
- private:
- value v;
- };
- // g crée simplement un thread de type f
- struct g
- {
- void operator()()
- {
- f f_inst;
- thread th( f_inst); // ERREUR, MUTEX NON COPIABLE !!!!!
- th.join();
- }
- };
- // main crée simplement un thread de type g
- int main()
- {
- g g_inst;
- thread th( g_inst);
- th.join();
- }
|