In message <199912191146.AA00953 / fit0298.fitec.co.jp>
fit0298 / fitec.co.jp writes:

> | [ruby-list:19677]の質問の意図は、『アトミックなメソッドからアトミック
> | なメソッドを呼び出すにはどうすれば良いか?』ということだったんですけど、
> | Mutexは、上のコードのように使うのが普通なのでしょうか?
> 
> すみません。アトミックなメソッドというのがちょっと理解できません。

「あるスレッドがそのメソッドを実行中の場合,ほかのスレッドがそのメソッ
ドを呼び出す事ができない」という事でよろしいのでは.

# 一種の monitor.


> | [ruby-list:19677]のコードは、このJavaの書き方を真似たものです。
> 
> Java はわからないのですが、[ruby-list:19681] のコードの動作を変えずに
> 記述を書き換えると以下になるのですが、意図の通りですか?

で,[ruby-list:19681] のコードも [ruby-list:19683] のコードも任意のス
レッドが同時にメソッドを起動できるので,全く意図に反したコードであると
思います.毎回別々の mutex を作っていたら mutex の意味無いです.

# 個室を確保しているつもりでみんなして壁に穴開けて新しく鍵のついた扉を
# 作っているようなものです :-)


Ruby の Mutex は reentrant でないのでたとえ同じスレッドであっても一度
lock された Mutex を再度 lock する事はできません.

....ということで,同一スレッドによる再入を許す Sync(sync.rb)を使うか
素直に Monitor(monitor.rb)を使うかすると良いのではないかと思います.

# 例によってドキュメントはありませんが,コメントを見ればなんとなくわか
# るんじゃないかと.


-- 
柳川和久 @ 東大阪市 . 大阪府                              December 19, 1999
明日は明日の桶屋が儲かる