ダウンロード サンプルファイル (15.2 KB)
pthreadはPOSIX仕様に基づくOSにおける非同期処理の仕組みです。他の非同期処理と比較すると新しい仕組みですが、その奥は深くさまざまな機能を持っています。本稿では条件変数の概要、気をつける点、同期と条件変数を使用したアプリケーションを解説します。
はじめに
この連載ではUNIX系OSなどで使われるスレッド「pthread」についてサンプルを交えて説明していきます。pthreadはPOSIXが仕様化したスレッドモデルです。サンプルはCと一部C++、調査環境はFedora 8(2.6.23.1-49.fc8)、32bit、glibc-4.1-2、gcc-4.1.2-33およびFedora Core 6(2.6.18-1.2798.fc6)、32bit、glibc-2.5-3、gcc-4.1.1-30を使用しています。
前回の記事
- 第1回:pthreadについて(概要・生成)
- 第2回:pthreadについて(同期)
4. 条件変数(1/3)
同期処理を行う際、ある共有情報が条件を満たしたらスレッドが動いて欲しい、という時があります。それまではサスペンドしてて欲しいですが、条件が満たされた時に他のスレッドから処理を始めるよう合図する仕組みが必要です。
条件変数は上記のような仕組みを提供します。
混乱しないように述べますが、mutexは共有情報への同時多重アクセスを回避するための機能で、条件変数はもっと単純で、スレッドの停止・再開を指示する信号のような機能です。
また、条件変数は必ずmutexとペアで使用されます。これは条件変数そのものがスレッドにとってクリティカルな情報であるからです。
4.1 関数リファレンス
主な条件変数にかかわる関数は以下の通りで、詳細は適時manやココなどで参照してください。
- int pthread_cond_init( pthread_cond_t * cond, pthread_condattr_t * cond_attr );
- int pthread_cond_destroy ( pthread_cond_t * cond );
- int pthread_cond_wait( pthread_cond_t * cond, pthread_mutex_t * mutex);
- int pthread_cond_timedwait( pthread_cond_t * cond, pthread_mutex_t *mutex, const struct timespec * abstime );
- int pthread_cond_signal( pthread_cond_t * cond );
- int pthread_cond_timedwait( pthread_cond_t * cond, pthread_mutex_t * mutex, const struct timespec * abstime );
- int pthread_cond_signal( pthread_cond_t * cond );
- int pthread_cond_broadcast( pthread_cond_t * cond );
4.1.1 各関数について
- pthread_cond_init
- pthread_cond_t
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
- pthraed_cond_destroy
- pthread_cond_wait
- pthread_cond_timedwait
- pthread_cond_signal
- pthread_cond_broadcast
この記事は参考になりましたか?
- pthreadについて連載記事一覧
- この記事の著者
-
赤松 エイト(エイト)
(株)DTSに勤てます。WebアプリやJavaやLL等の上位アプリ環境を密かに憧れつつも、ず~っとLinuxとかHP-UXばかり、ここ数年はカーネル以上アプリ未満のあたりを行ったり来たりしています。mixiもやってまして、こちらは子育てとか日々の日記メインです。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
