とりあえず公開。Windows VistaのThread PoolとCondition Variableを使い、かなり制限されたpthreadを実装している。ソースコードはとてもシンプル。ほとんど何もやっていない。MSVC限定。ライセンスはBoost Software License - Version 1.0
x264に使う目的で書いた。ある仕事をスレッドに丸投げして、結果を放置するか、待つ場合に使える。放置して、スレッドの終了を知る必要のない場合はpthread_detachを、待つ場合はpthread_joinを必ず呼び出すこと。さもないとリソースリークする。また、CRTはDLL版を使うこと。さもないと特定のCライブラリ関数を使った場合にリソースリークする。
スレッドプールで実装しているので、一度にいくらpthread_createをしても問題ない。VistaのThread Poolの実装はなかなか賢く、スレッドの消費するCPU時間などから、いくつスレッドを作り、いくつの仕事を実行するか、必要のないスレッドはいつ殺すか、などを判断してくれる。プログラマは何もする必要がない。ただ、プロセス中で最初から最後まで生きているようなスレッドの使い方には不向き。短時間で終わる。あるいは、終了時間は分からないが、とにかくプロセスの終了まで永遠に存在しているようなスレッドではない場合に効果的。
No comments:
Post a Comment
You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.