C ++ 11Mutex(ミューテックス)コメント

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/u014746838/article/details/90473600

複数のスレッドが同じリソースにアクセスすると、データの一貫性を確保するために、最も簡単な方法は、ミューテックス(ミューテックス)を使用することです。

(1)直接ミューテックス操作、すなわち直接ミューテックスのロック/アンロック機能を呼び出します。尚、この例では、スレッドのセットを作成するために、ブースト:: thread_groupを使用しています。

#include <iostream>
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>
 
boost::mutex mutex;
int count = 0;
 
void Counter() {
  mutex.lock();
 
  int i = ++count;
  std::cout << "count == " << i << std::endl;
 
  // 前面代码如有异常,unlock 就调不到了。
  mutex.unlock();
}
 
int main() {
  // 创建一组线程。
  boost::thread_group threads;
  for (int i = 0; i < 4; ++i) {
    threads.create_thread(&Counter);
  }
 
  // 等待所有线程结束。
  threads.join_all();
  return 0;
}

(2)使用して、自動ロックを解除lock_guard。原則はRAII、および同様のスマートポインタであります


#include <iostream>
#include <boost/thread/lock_guard.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>
 
boost::mutex mutex;
int count = 0;
 
void Counter() {
  // lock_guard 在构造函数里加锁,在析构函数里解锁。
  boost::lock_guard<boost::mutex> lock(mutex);
 
  int i = ++count;
  std::cout << "count == " << i << std::endl;
}
 
int main() {
  boost::thread_group threads;
  for (int i = 0; i < 4; ++i) {
    threads.create_thread(&Counter);
  }
 
  threads.join_all();
  return 0;
}

(3)ロック解除、自動ロックをunique_lockの使用。

unique_lockのと同じ原理をlock_guardが、より多くの機能(例えば、可変条件の使用などを組み合わせることができる)を有します。注意:typedefでの実際のunique_lockの中のmutex :: scoped_lock <mutexを>。

#include <iostream>
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>
 
boost::mutex mutex;
int count = 0;
 
void Counter() {
  boost::unique_lock<boost::mutex> lock(mutex);
 
  int i = ++count;
  std::cout << "count == " << i << std::endl;
}
 
int main() {
  boost::thread_group threads;
  for (int i = 0; i < 4; ++i) {
    threads.create_thread(&Counter);
  }
 
  threads.join_all();
  return 0;
}

 

おすすめ

転載: blog.csdn.net/u014746838/article/details/90473600