今さらだけどLinuxのfutexのご利益がよくわからない。FUTEX_WAIT/FUTEX_WAKEってsigwait/signalより速いのだろうか。ユーザが自前で待ちリスト作らなくてもいいだけ?
2010-08-12 15:52:13@ReiOdaira signalは対象がプロセス/スレッドで、futexは待ち列なので概念が違いますよね。Futex引数の対象アドレスでどのスレッドが寝ているかは起こす側は知らなくてよい。速度もfutexの方が速い場合が多々あるけど、それは内部実装なので
2010-08-12 16:02:47@kosaki55tea や、もちろん概念は違うんですけど以前見たpthreadの実装ではsigwait/signal使ってたんで、それに対してfutex使うと性能上嬉しい点があるのか、単に誰が寝てるのか知らなくていいだけなのか、知りたいなと。
2010-08-12 16:07:37元論文(?)など見るに、マルチプロセス対応の高速なロック機構を作りたかったんだろうか。シングルプロセスでマルチスレッドなアプリでは必ずしも必要ないのか。 http://www.kernel.org/doc/ols/2002/ols2002-pages-479-495.pdf
2010-08-12 16:14:23@ReiOdaira シグナルを使うとシグナル抜けがないように、スレッドの生成・消滅と排他とってスレッドの数が変わらない状態をつくらないといけないので劇遅です。原因は元々違うコンセプトなのに無理矢理エミュレートしてるのが敗因
2010-08-12 16:19:11@kosaki55tea なるほど。シグナル抜けの可能性は考えたことなかったですけど競合状態があるんですか。あのpthreadライブラリはどうしてたんだろ。
2010-08-12 16:33:14futexといえば、それ的なものはNewton OS(少ないプロセスと多くのスレッドを想定)にもあったな。ARMはながらく論理アドレスキャッシュで、その後のPsionなんかも不要なcswitchやcache flushを減らす工夫を色々していたわけだが。
2010-08-12 16:50:10