Boost.Act

おとなり日記になっていた2007-03-25さんの所でこんなものを見つけたので追記。並列処理をサポートするBoostライブラリ。

なんちゅーか、どういうトリックでこんなシンタックスを実現しているのやら(^^; C++は奥が深いねぇ。

裏でOpenMPコンパイラを使っている様子。性能は、OpenMPコンパイラのタスク管理に依存しそう。並列に実行できるからとタスクを生成しまくると、ちょっと遅くなりそうだけど、その辺はOpenMPがどうにか最適化してくれるのかしら?

forとかを並列化するのはいいとして(それなら素のOpenMPでも困らない)、actionでスレッドを生成できるみたい。action< unsigned int > fac_10( as_function( factorial ), 10 ); とかすると、factorial(10)呼び出しがスレッドとして呼ばれて、int const result = fac_10->inactive_value();とすると、その値を待てる様子。

あと、BOOST_ACTIVE型のようなものを定義できて、そうすると、その型への操作が別スレッドになる(けど同じ変数への操作は順番に行われる)ようにできるみたい。上述のProject ConcurのActive型と同じか?

つーか、だからどういうトリックでこんなシンタックスが実現できるのかと(^^;
# "="あたりを再定義しているのかなぁ?

並行処理(タイムアウトとかキャンセル的なもの)はサポートしないのかな…?