boost::thread... corrigez moi.

boost::thread... corrigez moi. - C++ - Programmation

Marsh Posté le 11-04-2005 à 15:20:13    

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 :
  1. #include"windows.h"
  2. #include"boost/thread/thread.hpp"
  3. using namespace boost;
  4. #include<cassert>
  5. #include<iostream>
  6. using namespace std;
  7. typedef mutex::scoped_lock lock;
  8. // une classe thread safe basée sur un mutex BOOST
  9. struct value
  10. {
  11. void set( bool const & arg )
  12. {
  13.  lock lk( mtx );
  14.  val = arg;
  15. }
  16. bool get()
  17. {
  18.  lock lk( mtx );
  19.  return val;
  20. }
  21. private:
  22. bool val;
  23. mutex mtx;
  24. };
  25. // f crée une instance de la classe value et l'utilise...
  26. struct f
  27. {
  28. void operator()()
  29. {
  30.  v.set( true );
  31.  Sleep(1000);
  32.  assert( v.get() == true );
  33.  v.set( false );
  34.  Sleep(1000);
  35.  assert( v.get() == false );
  36. }
  37. private:
  38. value v;
  39. };
  40. // g crée simplement un thread de type f
  41. struct g
  42. {
  43. void operator()()
  44. {
  45.  f f_inst;
  46.  thread th( f_inst); // ERREUR, MUTEX NON COPIABLE !!!!!
  47.  th.join();
  48. }
  49. };
  50. // main crée simplement un thread de type g
  51. int main()
  52. {
  53. g g_inst;
  54. thread th( g_inst);
  55. th.join();
  56. }

Reply

Marsh Posté le 11-04-2005 à 15:20:13   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed