[#6219] Ruby連載 第4話 — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/04
[#6221] Re: Ruby連載 第4話 — Shin-ichiro HARA <sinara@...> 1998/02/04

原です。

[#6224] Re: Ruby連載 第4話 — Yasunari Momoi <conan@...> 1998/02/04

ももちゃん@あるもにこすです.

[#6225] Re: Ruby連載 第4話 — matz@... (Yukihiro Matsumoto) 1998/02/04

まつもと ゆきひろです

[#6249] Re: i++ — 助田 雅紀 <masaki.suketa@...>

助田です。

33 messages 1998/02/04
[#6252] Re: i++ — gotoken@... (GOTO Kentaro) 1998/02/05

ことけんです

[#6255] Re: i++ — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#6260] Re: i++ — Yuji Shigehiro <sigehiro@...> 1998/02/05

しげひろです.

[#6314] RE: ruby's design policy (Re: I'd like to subscr ibe this ML) — 助田 雅紀 <masaki.suketa@...>

オブジェクト指向周辺をぶらぶらしている助田です。

11 messages 1998/02/06

[#6333] ruby 流に添削して下さい — nkon@...2.3web.ne.jp

13 messages 1998/02/07
[#6335] Re: ruby 流に添削して下さい — OZAWA Sakuro <crouton@...> 1998/02/07

さくです.

[#6372] ruby 1.1b7 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

24 messages 1998/02/10
[#6402] parsedate (Re: ruby 1.1b7 released) — WATANABE Hirofumi <watanabe@...> 1998/02/13

わたなべです.

[#6405] Re: parsedate (Re: ruby 1.1b7 released) — Tadayoshi Funaba <tadf@...> 1998/02/13

ふなばです。

[#6407] Re: parsedate (Re: ruby 1.1b7 released) — matz@... (Yukihiro Matsumoto) 1998/02/13

まつもと ゆきひろです

[#6373] call for scripts — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

133 messages 1998/02/10
[#6414] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/14

金城です.

[#6428] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6448] Re: call for scripts — Terutuoshi Kaneshiro <k-teru@...06.odn.ne.jp> 1998/02/16

金城です.

[#6452] Re: call for scripts — matz@... (Yukihiro Matsumoto) 1998/02/17

まつもと ゆきひろです

[#6481] Re: call for scripts — Kikutani Makoto <kikutani@...> 1998/02/17

きくたに@ぷ〜たろ〜です。

[#6483] Re: call for scripts — OZAWA Sakuro <crouton@...> 1998/02/17

さくです.

[#6495] Re: call for scripts — WATANABE Hirofumi <watanabe@...> 1998/02/18

わたなべです.

[#6416] Re: call for scripts — shugo@... (Shugo Maeda) 1998/02/14

前田です。

[#6417] rgrep (Re: call for scripts) — shugo@... (Shugo Maeda) 1998/02/15

前田です。

[#6423] Re: rgrep (Re: call for scripts) — matz@... (Yukihiro Matsumoto) 1998/02/16

まつもと ゆきひろです

[#6612] Re: call for scripts — Tadayoshi Funaba <tadf@...> 1998/02/21

ふなばです。

[#6582] File::Separator on cygwin — OZAWA Sakuro <ozawa@...>

小澤さくです。

19 messages 1998/02/20
[#6583] Re: File::Separator on cygwin — WATANABE Hirofumi <watanabe@...> 1998/02/20

わたなべです.

[#6586] Re: File::Separator on cygwin — OZAWA Sakuro <ozawa@...> 1998/02/20

小澤さくです。

[#6591] ruby 1.1b8 released — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

32 messages 1998/02/20
[#6620] rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/22

前田です。

[#6629] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

けいじゅ@日本ラショナルソフトウェアです.

[#6643] Re: rbc.rb and binding — shugo@... (Shugo Maeda) 1998/02/23

前田です。

[#6649] Re: rbc.rb and binding — keiju@... (石塚圭樹 ) 1998/02/23

けいじゅ@日本ラショナルソフトウェアです.

[#6650] Re: rbc.rb and binding — matz@... (Yukihiro Matsumoto) 1998/02/23

まつもと ゆきひろです

[#6667] JRI 0.5 worked (was Re: rbc.rb and binding) — OZAWA Sakuro <crouton@...> 1998/02/23

さくです.

[#6687] Re: JRI 0.5 worked (was Re: rbc.rb and binding) — shugo@... (Shugo Maeda) 1998/02/24

前田です。

[#6712] JRI and JDBC — OZAWA Sakuro <ozawa@...> 1998/02/24

小澤さくです。

[#6635] hello — WATANABE Tetsuya <tetsu@...>

渡辺哲也と申します。

15 messages 1998/02/23

[#6706] Re: Counter class — toyofuku@...

豊福@パパイヤです。

12 messages 1998/02/24

[#6735] Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda)

前田です。

27 messages 1998/02/24
[#6746] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/25

けいじゅ@日本ラショナルソフトウェアです.

[#6747] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6752] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6754] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/25

前田です。

[#6756] Re: Mutex/ConditionVariable/Queue — senda@... 1998/02/25

From: shugo@po.aianet.ne.jp (Shugo Maeda)

[#6786] Re: Mutex/ConditionVariable/Queue — senda@...

From: shugo@po.aianet.ne.jp (Shugo Maeda)

33 messages 1998/02/26
[#6791] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6794] Re: Mutex/ConditionVariable/Queue — shugo@... (Shugo Maeda) 1998/02/26

前田です。

[#6796] Re: Mutex/ConditionVariable/Queue — keiju@... (石塚圭樹 ) 1998/02/26

けいじゅ@日本ラショナルソフトウェアです.

[ruby-list:6791] Re: Mutex/ConditionVariable/Queue

From: shugo@... (Shugo Maeda)
Date: 1998-02-26 10:02:27 UTC
List: ruby-list #6791
前田です。

In message "[ruby-list:6786] Re: Mutex/ConditionVariable/Queue"
senda@ic.rdc.ricoh.co.jp <senda@ic.rdc.ricoh.co.jp> wrote:

|shugo> # 問題なのはwaitの実装ではなくてsignalした後どのスレッドに制御を
|shugo> # 渡すかなのですよね?
|shugo> 
|
|そのとうりです。
|
|# メールを出したあともしかしたら
|# 誤解されるかもしれないと思っていました。

一瞬勘違いしそうになりました(^^;

|shugo> |	Signal-Return   : signalしたプロセスを直ちにreturnさせる。
|shugo> 単純。
|shugo> 
|shugo> すみませんreturnとはどういう意味なんでしょう?
|shugo> 
|
|これはmonitor固有の実装になってしまうのですが、signal()とmutexのリリースを
|同時にやって呼び出し元がモニタから抜けることを意味します。
|
|意味はそういう意味なのですが実際の処理はwait()の最後のlockをやめてsignal側
|ではunlockをやめます。これで無用なコンテキストスイッチが減ります。

これはちょっと無理そうですね。

|shugo> |	Signal-Urgent   : signalを受け取ったスレッドを走らせる。発
|shugo> 行元に
|shugo> |			  次に走るプライオリティを与える。公平。
|shugo> 
|shugo> これはRubyのスレッドでは無理のような気がします。
|
|Thread.runだけでは確実ではないのはたしかです。
|が、mutexに関係するthreadだけにかぎれば実装することは可能だと思うんですが。

Rubyスクリプトだけでできます?
他のスレッドをいったん全部止めてwaitから出る時にレジュームさせる、くらい
しか思い付きませんでした。
優先度を指定したり、実行するスレッドを指定したりはできませんから直接
スレッドに制御を渡すのは無理ですよね。

|shugo> Rubyだとタイマーでスケジューリングイベントが起こるので、Thread.critical
|shugo> をtrueにしないといずれスレッドが切り替わってしまいますよね。
|shugo> 切り替わったスレッドがwaitしていたスレッドでなければまた条件を偽にされ
|shugo> る可能性があるわけですから同じことではないでしょうか。
|shugo> 
|
|そのとおりです。本にもそう書いてあるのですが、本の結論は
|	3つとも同様に強力であることは[Howard,1976]で論理的に示されており、
|	1つの種類を使用して別のものをシミュレートすることができる。
|	実際にどの種類のモニタを選択するかは好みの問題である。
|だそうです。
|
|# 私も納得していないんですが。

うーん、納得いきませんね(^^;
# [Howard,1976]というのを参照すれば納得できるのかな。

何とかスケジューリングの問題を避けて通れないかと思って考えて
みたのですが、

1. Mutexの獲得要求のキューを二つ用意して、waitからの要求を優先させる。
  # __cond_lock/__cond_unlockとかを作ってConditionVariableからしか呼ば
  # ないようにする。

2. waitの引数でMutexを指定するのを止めて、ConditionVariableのインスタンス
  変数にMutexを持つようにする。

3. Mutex#ownerで現在Mutexのオーナーになっているスレッドを獲得できるように
  する。

4. signal/broadcast/waitはMutexのオーナースレッド以外が実行した場合は例外を
  上げる。

こうすればsignalを呼んだ時点ではMutexが解放されていないので、他の
スレッドに制御が移っても条件が偽になるような変更をされないですみます。

と思ったのですが、signalしたスレッドから条件を偽にしようとする
スレッドに移った後、waitしたスレッドに移らずにまたsignalしたス
レッドに戻ってMutexが解放され、その後さらにwaitしたスレッドに
移らず、条件を偽にしようとするスレッドに移る、というケースがもし
あるとまずいですね。
# Rubyのスケジューラでこういうことが起きないことが保証されていれば
# 大丈夫なのですが。

普通signalした直後に条件が偽になったりするケースはあまりないような
気もするので、実用的にはこれくらいは問題ないかな...とか思ったりする
のですが、どうでしょう。

In message "[ruby-list:6781] Re: Mutex/ConditionVariable/Queue"
Yukihiro Matsumoto <matz@netlab.co.jp> wrote:

|eval.cをいじってくれても全然構いませんよ ^^;;;

というのはやはり辛いので(^^;

-- 
前田 修吾

In This Thread