千田です。 午前休していたので慌てて目を通しています。 shugo> ||これはmonitor固有の実装になってしまうのですが、signal()とmutexの shugo> リリースを shugo> ||同時にやって呼び出し元がモニタから抜けることを意味します。 shugo> || shugo> ||意味はそういう意味なのですが実際の処理はwait()の最後のlockをやめ shugo> てsignal側 shugo> ||ではunlockをやめます。これで無用なコンテキストスイッチが減ります。 shugo> | shugo> |これはちょっと無理そうですね。 shugo> shugo> broadcastのことを考えてすぐ無理だと思ってしまったのですが、 shugo> うまく解決できるんでしょうか? shugo> ええと、モニタでシグナルはブロックの最後にしか書けないという制限が生じるの でConditionVariableの実装には合わないでしょう。 shugo> |# 私も納得していないんですが。 shugo> shugo> うーん、納得いきませんね(^^; shugo> # [Howard,1976]というのを参照すれば納得できるのかな。 これもどうやらコンテキストスイッチしないから効率がよくなるということのよう です。そのかわり(1)条件が変ってしまうかも知れない (2)Threadの実行順序が予 測困難になる という問題が出てきます。 1456 02/26 Shugo Maeda [ruby-list:6794] R 前田です。 eval.cを覗いてみたので 1457 02/26 Shugo Maeda [ruby-list:6795] R 前田です。 Mutx.instance_methods 1458 02/27 石塚圭樹 [ruby-list:6796] R けいじゅ@日本ラショナルソフトウ 1461 02/27 Kazuhisa YANAG [ruby-list:6799] R ....ふつうそれって, 状態変数とは 1462 02/27 Yukihiro Matsu [ruby-list:6800] R まつもと ゆきひろです そーなんで 1463 02/27 Shugo Maeda [ruby-list:6802] R 前田です。 たしかにMutexだけ使っ 1464 02/27 Shugo Maeda [ruby-list:6801] R 前田です。 あれ、分けてありますよ 1465 02/27 Shugo Maeda [ruby-list:6803] R 前田です。 そういえばfjで久野さん 1466 02/27 石塚圭樹 [ruby-list:6804] r けいじゅ@日本ラショナルソフトウ 1468 02/27 Kazuhisa YANAG [ruby-list:6806] R SizedQueue が Queue を継承してい わたしもおちこぼれかけているので、 :-) あとでまとめてRESするつもり(月曜日かな)ですが、 def signal if @mutex.owner != Thread.current raise ThreadError, "current thread not owner" end @waiting_mutex.synchronize { t = @waiting.shift t.run if t } end 確認です。 これってsignalしたあとthreadはおこすけれど、そのまま自分も走ってしかも mutexそのものは開放していないので Signal-Continueになってますよね? そのうえで、変なやつが条件を変えないようにしようということだと理解していい ですか? # 読みきれていないかも知れない。 S.Senda