スレッドプログラミング 
top

mutex

  • mutexは、Mutual Exclusionの略称。スレッド間での資源アクセスの排他制御に使う。ロック。
  • pthread_mutex_t型の変数を使う。これを同期オブジェクト(synchronization object)と呼ぶ。同期制御のためのオブジェクトという感じ。
  • pthread_mutex_init()で初期化。
  • pthread_mutex_destroy()で消す。この後、再度mutex_init()で初期化して使ってもよい。
  • ロックを取得するにはpthread_mutex_lock(pthread_mutex_t*)を使う。すでにこのmutexがロックされている場合は、ここで待ち状態になる。
  • ロックが取得できなかった場合に待ちたくなければ、pthread_mutex_trylockを使う。

pthread_join(target_thread, NULL);

target_threadを終了させ、それが止まるまで待つ。

Condition Variable

ある条件が満たされるまでスレッドの実行をブロックするためのしかけ。ある条件はcondition variableという変数で表現されるが、別のスレッドが条件を変えるまでスレッド実行をブロックするというような使い方をすることもできる。

pthread_cond_wait()でmutexロックを持っているスレッドは、待ち状態に入りロックを解放する。別のスレッドは、pthread_cond_signal()やpthread_cond_broadcast()でcondition variableを変更することができ、その変更が起こると、pthread_cond_wait()で待ち状態にあるスレッドがロックを再度取得し、スレッド実行を再開する。

imported