anchor.diff:  = multithreading
   
   == threads, groups
  -
  -[source,c++]
   ----
   void change_count(){]
   
  
positive.code:   std::cout << f.get() << '\n';
  }
  ----
  
negative.code: 
  * locks guard (RAII, inutile d'appeler lock/unlock)
  
  [source,c++]
  ----
  for (int i = 0; i < 5; ++i)
  {
    wait(1);
    boost::lock_guard<boost::mutex> lock{mutex};
    std::cout << "Thread " << get_id() << ": " << i << std::endl;
  }
  ----
  
  * shared_mutex (lock par shared_lock ou unique lock)
  
  
  [source,c++]
  ----
  void write_acess()
  {
    boost::unique_lock<boost::mutex> lock{mutex};
  }
    
  void read_accesst()
  {
    for (int i = 0; i < 3; ++i)
    {
      boost::shared_lock<boost::shared_mutex> lock{mutex};
      std::cout << random_numbers.back() << '\n';
    }
  }
  ----
  
  == conditions
  
  [source,c++]
  ----
  std::condition_variable cv;
  std::mutex cv_m; // This mutex is used for three purposes:
  