[#1562] Re: rbdj1227.lzh —
わたなべです.
[#1582] [BUG] Regexp — sinara@...
原です。あけましておめでとうございます。
まつもと ゆきひろです
原です。
まつもと ゆきひろです.
[#1583] jchop — WATANABE Hirofumi <watanabe@...>
わたなべです. おめでとう.
[#1614] [tk] Cannot execute some samples — Eiji-usagi-MATSUmoto <ematsu@...>
まつもと@ぴーえふゆーと申します。はじめまして。
[#1625] matz has back! — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#1639] Script for making Index of Ruby Manual — s.suda@...
須田です。
[#1655] [Q] Use of '==', 'eql?' and 'hash' — sinara@...
原です。
[#1667] [Q] Use of Thread and Mutex — sinara@...
原です。
まつもと ゆきひろです.
原です。
原です。
[#1670] [Q] Timeout in Socket (Re: [Q] Use of Thread and Mutex) — sinara@...
原です。
まつもと ゆきひろです.
[#1677] ruby-1.0-970110 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
[#1682] 組み込みクラスのメソッド .htm — (Dezawa Shin-ichiro) <dezawa@...>
出沢です
[#1688] Ruby 1.0-970110 on NeXTSTEP — SHIROYAMA Takayuki <psi@...>
[#1705] 正規表現 単独の ? — Sinichiro Dezawa <dezawa@...>
出沢です
まつもと ゆきひろです
matz> rubyの使っているGNUの正規表現ルーチンのデフォルトではパター
わたなべです.
まつもと ゆきひろです.
[#1720] ruby 1.0-970116 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
[#1723] in-place edit on djgpp/win32 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです.
[#1753] Usage of Menu — Noritugu Nakamura <nnakamur@...>
[#1762] ruby 1.0-970118 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#1771] rectangle of canvas widget — Noritugu Nakamura <nnakamur@...>
原です。
まつもと ゆきひろです
原です。
まつもと ゆきひろです.
原です。
[#1788] Text of TkCanvas — Noritugu Nakamura <nnakamur@...>
まつもと ゆきひろです.
まつもと ゆきひろです.
まつもと ゆきひろです.
わたなべです.
まつもと ゆきひろです.
[#1794] Filetest error on Ruby-DJ — s.suda@...
須田です。
[#1833] GD.c revised — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#1865] ruby-1.0-960124 available — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
わたなべです.
まつもと ゆきひろです.
わたなべです.
わたなべです.
まつもと ゆきひろです.
まつもと@ぴーえふゆーです。
まつもと ゆきひろです.
まつもと@ぴーえふゆーです。
まつもと ゆきひろです.
まつもと@ぴーえふゆーです。
[#1871] None — (Dezawa Shin-ichiro) <dezawa@...>
でざわです
[#1875] toplevel of Tk — Noritugu Nakamura <nnakamur@...>
[#1899] [Dist] Mutex — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
[#1926] [Dist] Mutex module — keiju@... (Keiju ISHITSUKA)
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
けいじゅ@SHLジャパンです.
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
原です。
けいじゅ@SHLジャパンです.
原です。
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
まつもと ゆきひろです.
原です。
けいじゅ@SHLジャパンです.
まつもと ゆきひろです.
[#1953] open (file descriptor) — j_kuro@... (Jun Kuroda)
黒田です.
まつもと ゆきひろです.
黒田です.
原です。
まつもと ゆきひろです.
[ruby-list:1991] Mutex_m
けいじゅ@SHLジャパンです.
Mutexのモジュール版(Mutex_m)を公開します. モジュールはmutex_m.rbのまま
でもいいですし, thread.rbに入れて下さってもかまいません.
このモジュールは, クラス変数Lockedを使って待ちに入っているスレッドを保
持しています. Lockedはハッシュでキーはこのモジュールをエクステンドした
オブジェクトのidとなっています.
Locked -> [aMutex1=>[thread1, ...], aMutex2=>[...]]
# 今議論されているハッシュ の仕様に関わりなく, キーをオブジェクトidに
# しなくてはならないのでリリースすることにしました.
オリジナルのMutexクラスはインスタンス変数で情報を保持していましたので,
Mutexクラスより若干性能は落ちますが, オブジェクトの(ロック)管理が楽に
はなっていると思います.
あと, メソッド名の競合についてはまだ対応していません. 名前が一般的なの
で気になるは気になりますので, ある程度の競合の対応に関しては,
object_extendの仕様が変更され次第対応しようと思っています.
使い方は以下のようになります.
require "mutex_m.rb"
obj = Object.new
obj.extend Mutex_m
obj.lock
obj.unlock
...
後はMutexと同じ使い方...
# ソースの後に幾つか質問があります.
--ここから--
#
# mutex_m.rb -
# $Release Version: 0.9$
# $Date: 97/01/31 13:05:03 $
#
# --
# Usage:
# require "mutex_m.rb"
# obj = Object.new
# obj.extend Mutex_m
# ...
# 後はMutexと同じ使い方
#
module Mutex_m
Locked = Hash.new
def locked?
Locked.key?(self.id)
end
def try_lock
Thread.critical = TRUE
if Locked.key?(self.id)
ret = FALSE
else
Locked[self.id] = []
ret = TRUE
end
Thread.critical = FALSE
ret
end
def lock
while (Thread.critical = TRUE; w = Locked[self.id])
w.push Thread.current
Thread.stop
end
Locked[self.id] = []
Thread.critical = FALSE
self
end
def unlock
Thread.critical = TRUE
if wait = Locked.delete(self.id)
Thread.critical = FALSE
for w in wait
w.run
end
else
Thread.critical = FALSE
end
self
end
def synchronize
begin
lock
yield
ensure
unlock
end
end
end
-- ここまで --
質問:
[1] lockについて
def lock
while (Thread.critical = TRUE; w = Locked[self.id])
w.push Thread.current
Thread.stop
end
Locked[self.id] = []
Thread.critical = FALSE
self
end
whileのなかで Thread.critical = TRUEをしたまま Thread.stopしますが,
Thread.stopすると, Thread.criticalはFALSEになるものなのですか? それと
も, この状態はThread毎に持っている?
[2] Thread.critical = TRUE
としなくては行けなくなるのはどういう時なのでしょう? つまり, スレッドの
スイッチの粒度はどのくらいなのでしょう?
それとかかわるのですが, 共有オブジェクトにアクセスする時には必ず
Thread.critical = TRUEとしなくてはいけない? それとも書き込む時だけでしょ
うか?
上記の例だと:
def locked?
Locked.key?(self.id)
end
がありますが, 問題ありますか?
[3] lockのタイムアウト
これはMutexの仕様にも関わるのですが, lockのタイムアウトも指定できた方
が嬉しい時もあると思うのですが... 実現は面倒ですね(^^;;;
__
.........................................石塚 圭樹@SHLジャパン(株)...
------------>アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----