Linuxのfutexの必要性について

2
ReiOdaira @ReiOdaira

LinuxのfutexってHubertus Frankeたちが作ったんかw。知らんかった。

2010-08-12 15:33:24
ReiOdaira @ReiOdaira

今さらだけどLinuxのfutexのご利益がよくわからない。FUTEX_WAIT/FUTEX_WAKEってsigwait/signalより速いのだろうか。ユーザが自前で待ちリスト作らなくてもいいだけ?

2010-08-12 15:52:13
ReiOdaira @ReiOdaira

あー、マルチプロセス対応のロック作るときにはプロセス間にまたがる待ちリストを自前で作るの面倒くさいから嬉しいかも。

2010-08-12 15:59:11
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@ReiOdaira signalは対象がプロセス/スレッドで、futexは待ち列なので概念が違いますよね。Futex引数の対象アドレスでどのスレッドが寝ているかは起こす側は知らなくてよい。速度もfutexの方が速い場合が多々あるけど、それは内部実装なので

2010-08-12 16:02:47
ReiOdaira @ReiOdaira

@kosaki55tea や、もちろん概念は違うんですけど以前見たpthreadの実装ではsigwait/signal使ってたんで、それに対してfutex使うと性能上嬉しい点があるのか、単に誰が寝てるのか知らなくていいだけなのか、知りたいなと。

2010-08-12 16:07:37
ReiOdaira @ReiOdaira

元論文(?)など見るに、マルチプロセス対応の高速なロック機構を作りたかったんだろうか。シングルプロセスでマルチスレッドなアプリでは必ずしも必要ないのか。 http://www.kernel.org/doc/ols/2002/ols2002-pages-479-495.pdf

2010-08-12 16:14:23
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@ReiOdaira シグナルを使うとシグナル抜けがないように、スレッドの生成・消滅と排他とってスレッドの数が変わらない状態をつくらないといけないので劇遅です。原因は元々違うコンセプトなのに無理矢理エミュレートしてるのが敗因

2010-08-12 16:19:11
ReiOdaira @ReiOdaira

@kosaki55tea なるほど。シグナル抜けの可能性は考えたことなかったですけど競合状態があるんですか。あのpthreadライブラリはどうしてたんだろ。

2010-08-12 16:33:14
Nobuhiko FUNATO @nfunato

futexといえば、それ的なものはNewton OS(少ないプロセスと多くのスレッドを想定)にもあったな。ARMはながらく論理アドレスキャッシュで、その後のPsionなんかも不要なcswitchやcache flushを減らす工夫を色々していたわけだが。

2010-08-12 16:50:10