class TJSemaphore
セマフォクラス
文書
セマフォクラス.このクラスはバイナリセマフォあるいは計数型セマフォとして使える. 一般的な排他・同期の問題を解決できる. このクラスのオブジェクト を作成する時には初期値が重要である. 後述の例を参照.
通常、一般的な排他・同期の問題を解決するためには、TJSyncObjectを 用いることを推奨する。
一部、TJSyncObject よりも TJSemaphore がふさわしい例をあげるならば 非同期出力完了の同期が考えられる. 一般的には非同期出力を使う理由は出力要求後も何か処理をしたいからで ある. ということは同期のタイミングではすでに非同期出力が完了している 可能性があることになり TJSyncObject の wait() ではすでに notify() されていないか慎重に判断しなければならない. その点で TJSemaphore は take() と give() の実行順序とは無関係に同期 がとれる. したがってこの問題にはセマフォが適している.
* 使い方の例 * * 単純な同期の場合 * * セマフォは初期値 0 とする. このオブジェクトは同期をとる * 2つのスレッドが知っているものとする. * * TJSemaphore sem(0); // 初期値 0 が重要 * * 待つスレッドは * * sem.take(); * * を実行する. 合図するスレッドは * * sem.give(); * * を実行することにより待っているスレッドが目覚める. * このケースでは合図するスレッドが先に give() を実行しても * 問題は起こらない. 単に take() がブロックされずに復帰する * だけである. TJSyncObject の wait() 呼び出しは notify() * されることをプログラマが保証しなければならない. 通常それ * は1個の状態変数で容易に実現できる. TJSemaphore はその状 * 態変数を内部に持っているため give() が先に走ったことを * take() が知ることができると考えると理解しやすい. * * 排他制御の場合 * * この場合は初期値を 1 とすることが重要である. * * TJSemaphore sem(1); // 初期値 1 が重要 * * 競合するスレッドは次の方法で critical region を実現できる. * * sem.take(); * // critical region * // ここで共有資源を操作する. * sem.give(); *
- TJSemaphore(int inivalue = 0)
-
TJSemaphore を作成する.
- パラメータ:
- inivalue - 初期値
- virtual ~TJSemaphore()
- TJSemaphore を消去する
- void take()
- Semaphore を取得する. 資源が不足している場合はブロックされる.
- bool take(long milliseconds)
- タイムアウトを指定して Semaphore を取得する. 資源が不足している場合はブロックされる.
- 返す値 :
- true: 取得できた false: タイムアウト
- パラメータ:
- milliseconds - ミリ秒
- 子クラスは存在しません
- 作者 :
- Susumu TOKUI @date 1998,6/1
索引(アルファベット順) HTMLクラス継承 または Java
This page was generated with the help of DOC++.