DP

Active Object

デザインパターン(マルチスレッド)まとめ 非同期のメッセージを受け取り、それを能動的に処理を行い、結果を返すパターン。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boost.Thread を使って書いたコード。

Thread-Specific Storage

デザインパターン(マルチスレッド)まとめ スレッド固有の領域を扱うパターン。 Boost.Thread には boost::thread_specific_ptr というクラスがあるので、これを使えば実現できる。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編…

Two-Phase Termination

デザインパターン(マルチスレッド)まとめ 強制的に外部から終了するのではなく、終了要求だけ出しておいて自分で終了してもらうようにするパターン。 終了要求を出して(1段階目)、実際に終了する(2段階目)という2つの段階を経て終了するので、この…

async_delegate

汎用的に非同期メッセージを投げて戻り値を返してくれるクラスを作りました。 async_delegate::invoke に関数を設定すると、その関数を別スレッドから呼び出します。 async_delegate::invoke の戻り値である async_result_ptr を使って、同期処理を行い、呼…

Future

デザインパターン(マルチスレッド)まとめ 非同期メッセージの戻り値を受け取るためのパターン これ、C# の同期メソッドの非同期呼び出しで使われてるパターンと同じなのかな。 data クラスは IAsyncResult に対応して、host クラスは Begin〜, End〜 を持…

Worker Thread

デザインパターン(マルチスレッド)まとめ スレッドを起動する時間をケチるのと、スレッド数の管理を行うパターン。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boost.Thread を使って書いたコード。 これ、reques…

Thread-Per-Message

デザインパターン(マルチスレッド)まとめ 非同期メッセージの投げっぱなしバージョン。 戻り値が欲しい場合は Future パターンを使用する。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boost.Thread を使って書い…

Immutable のメモ

デザインパターン(マルチスレッド)まとめ Immutable は以下の場合に使用できる インスタンスの生成後、状態(メンバ)が変化しないとき このとき、setter メソッドが無いというだけでは不十分で、メンバが参照している先のインスタンスも変化しない必要が…

Single Thread Execution のメモ

デザインパターン(マルチスレッド)まとめ Single Thread Execution は、以下の場合に使用される。 マルチスレッドの場合 SharedResource 役が複数のスレッドからアクセスされる場合 状態(メンバ)が変化する可能性があるとき デッドロックになる可能性が…

Before/After クラス

デザインパターンの一つに Before/After パターンというのがあるらしくて、これは Before 処理をしたら After 処理を必ず行うように保証するパターンらしい。 Java ならこんな風に書ける public void func() { hoge.before(); try { doSomething(); } finall…

Read-Write Lock

デザインパターン(マルチスレッド)まとめ 書き込みを行っている場合にだけ排他制御を行うパターン。 Boost には read_write_mutex というのがあって、これを使えば Read-Write Lock を実現することがでk……ってバージョン1.34.1 だとドキュメントにはある…

Producer-Consumer

デザインパターン(マルチスレッド)まとめ あるスレッドから別のスレッドにデータを渡すためのパターン。 というか Guarded Suspension とどう違うのかよく分かんない。 中身はほとんど同じだけど、その目的が違うのかなぁ……。 以下は増補改訂版 Java言語で…

Balking

デザインパターン(マルチスレッド)まとめ 適切な状態になっていないなら処理を中断する、というパターン。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boost.Thread を使って書いたコード。 save, doSave メソッ…

Guarded Suspension

デザインパターン(マルチスレッド)まとめ 適切な状態になっていないならスレッドを待たせる、というパターン。 boost::condition を使って実現することが出来る。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boos…

Immutable

デザインパターン(マルチスレッド)まとめ 読み取りしかしないなら排他制御を行う必要がない、というパターン。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boost.Thread を使って書いたコード。

Single Threaded Execution

デザインパターン(マルチスレッド)まとめ 同時に実行できるスレッドを1つだけにするパターン。 boost::mutex と boost::mutex::scoped_lock を使えばいい。 以下は増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編のサンプルを Boost.Thr…

デザインパターン(マルチスレッド)まとめ

Single Threaded Execution メモ Immutable メモ Guarded Suspension メモ Balking メモ Producer-Consumer メモ Read-Write Lock メモ Thread-Per-Message メモ Worker Thread メモ Future メモ Two-Phase Termination メモ Thread-Specific Storage メモ A…