pthread

Pthreadでスピンロックがあるらしい

http://codezine.jp/a/article/aid/1893.aspx この関数って始めて知った。オライリーのPthread本にも載っていないので新しいのかな? ちなみにスピンロックといえばビジーウェイトのこと。 主なspin関数は以下の通りです。詳細は適時manなどで参照してくださ…

pthread_cond

久しぶりにPthreadについて。 Ruby1.9のYARVではスレッドがRubyレベル出はなく、システムのスレッドを使用するようになる。 Ruby1.9のソースを眺めていたらpthread関係で、 pthread_cond系を使用していたのを見たのを切っ掛けにメモ。 普段からPthreadは使用…

-lpthreadと-pthread

環境はLinux。 少し古いgccでは-lpthreadと-pthreadのふたつがあった。 lpthreadは何か問題があって使わずに、 pthreadを使うようにと言われていた。 家のLinux(Kernel2.6、gcc4系)では-lpthreadが存在しない。 MANにも存在しない。 いつのまにやら削除され…

SUNのマニュアル

http://docs.sun.com/app/docs/doc/819-0390

スケジューリング関係

Pthreadのメモ続き 今日はスケジューリングについて。 スケジューリングポリシーについて pthread_attr_t attr; pthread_attr_init(&attr); /* スケジューリングポリシーを取得する */ pthread_attr_getschedpolicy(&attr, SCHED_RR); /* ラウンドロビンに設…

TLSが使えない

PPCで使用したら何故かSIGSEGVが発生して使用できない。 i686では普通に使用できるのに。 色々調べたらここに原因が書いてあった。 どうやらGCC3.4からサポートしているみたい。

スレッド間のデータの受け渡し その他編

上記以外で処理速度を気にしない場合はLocal IPC(socketpair())かpipe()をよく使用する。 他のIPCは余り使用したことが無い。

スレッド間のデータの受け渡し volatile編

mutexを使用したくない場合はvolatileを使用すること。 ただし、これはできるだけ使用しない方が良い。

スレッド間のデータの受け渡し mutex編

プロセス間ではIPCを使用するが、 スレッドの場合メモリを共有しているので普通は共有変数(グローバル変数)だけでよい。 共有変数を使用する場合は値を保証するために、 複数スレッドからのアクセス制御を行わないといけない。 アクセス制御を行うにはmutex…

Pthreadのコンパイルオプション

昨日書き忘れていたので書いておく Linuxのpthreadのコンパイルでは-lpthreadsとするのは間違い。 -pthreadとすること。 http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html Linux でのコンパイル Linux では、Pthreads API を用いたプログ…

スレッド生存確認方法

上記の方法を行うと別の問題が発生する。 本来終了して欲しくないスレッドが、なんらかの理由により終了した場合 それを知る方法が無い。 pthread_join()を行っていればスレッドが終了したのを知るのは可能だが、 デタッチ属性にした場合はpthread_join()が…

スレッド作成

Pthreadは普段から使用するので自分のために今後もまとめていく。 Pthreadのドキュメントはpthreads(7)から読んで行くと良い。 JM:http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html die.net:http://www.die.net/doc/linux/man/man7/pthre…