タグ

排他制御に関するa-hamahamaのブックマーク (2)

  • 条件変数 Step-by-Step入門 - yohhoyの日記(別館)

    多くのプログラミング言語では、マルチスレッド処理向け同期プリミティブとして「ミューテックス(mutex)」と「条件変数(condition variable)」を提供しています*1 *2。ミューテックスは排他制御機構として有名ですし、その動作もロック(lock)/アンロック(unlock)と比較的理解しやすいため、不適切に利用されるケースはあまり無いと思います*3。一方、条件変数の動作仕様はしばしば誤解され、不適切な利用による並行性バグに悩まされるケースが多いようです。 記事では、スレッドセーフなFIFO(First-In-First-Out)キューを段階的に実装していく事例を通して、条件変数の適切な使い方について説明していきます。例示コードではC++11標準ライブラリを用いますが、Pthreads(POSIX Threads)やC11標準ライブラリへは単純に読み替え可能です(→Pthr

    条件変数 Step-by-Step入門 - yohhoyの日記(別館)
  • volatile変数とマルチスレッドとの関係についての押し問答(前編) - yohhoyの日記

    プログラミング言語C++のvolatile変数がスレッド間の同期機構として機能するか否かという論点について、有りそうな質問とその答えについての簡易メモ。(自身の思考整理用) 結論:このプログラムは可搬性が無く、未定義動作(undefined behavior)を引き起こす。C++11ではvolatile変数でなくatomic変数を用いるべき。C++03以前ではコンパイラ依存の仕組みを利用する。 volatile int running = 1; // 処理スレッド void another_thread() { while (running) { // ??? //... } } // 制御側スレッド void main_thread() { //... running = 0; // ??? } C++言語仕様ではどう定義される?(C++03以前) C++03以前のC++言語仕様ではそも

    volatile変数とマルチスレッドとの関係についての押し問答(前編) - yohhoyの日記
  • 1