[#1582] [BUG] Regexp — sinara@...

原です。あけましておめでとうございます。

16 messages 1997/01/06

[#1705] 正規表現 単独の ? — Sinichiro Dezawa <dezawa@...>

出沢です

14 messages 1997/01/15

[#1771] rectangle of canvas widget — Noritugu Nakamura <nnakamur@...>

18 messages 1997/01/19

[#1788] Text of TkCanvas — Noritugu Nakamura <nnakamur@...>

28 messages 1997/01/20
[#1800] Re: Text of TkCanvas — matz@... (Yukihiro Matsumoto) 1997/01/21

まつもと ゆきひろです.

[#1802] Re: Text of TkCanvas — Noritugu Nakamura <nnakamur@...> 1997/01/21

[#1806] Re: Text of TkCanvas — matz@... (Yukihiro Matsumoto) 1997/01/22

まつもと ゆきひろです.

[#1816] Re: Text of TkCanvas — Noritugu Nakamura <nnakamur@...> 1997/01/22

[#1819] Re: Text of TkCanvas — matz@... (Yukihiro Matsumoto) 1997/01/22

まつもと ゆきひろです.

[#1865] ruby-1.0-960124 available — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

25 messages 1997/01/24
[#1878] Re: ruby-1.0-960124 available — WATANABE Hirofumi <watanabe@...> 1997/01/27

わたなべです.

[#1879] Re: ruby-1.0-960124 available — matz@... (Yukihiro Matsumoto) 1997/01/27

まつもと ゆきひろです.

[#1880] Re: ruby-1.0-960124 available — WATANABE Hirofumi <watanabe@...> 1997/01/27

わたなべです.

[#1890] Re: ruby-1.0-960124 available — matz@... (Yukihiro Matsumoto) 1997/01/27

まつもと ゆきひろです.

[#1926] [Dist] Mutex module — keiju@... (Keiju ISHITSUKA)

けいじゅ@SHLジャパンです.

81 messages 1997/01/28
[#1929] Re: [Dist] Mutex module — matz@... (Yukihiro Matsumoto) 1997/01/29

まつもと ゆきひろです.

[#1934] Re: [Dist] Mutex module 1997/01/29

けいじゅ@SHLジャパンです.

[#1935] Re: [Dist] Mutex module — matz@... (Yukihiro Matsumoto) 1997/01/29

まつもと ゆきひろです.

[#1938] Re: [Dist] Mutex module 1997/01/29

けいじゅ@SHLジャパンです.

[#1940] Re: [Dist] Mutex module — matz@... (Yukihiro Matsumoto) 1997/01/29

まつもと ゆきひろです.

[#1944] Re: [Dist] Mutex module 1997/01/29

けいじゅ@SHLジャパンです.

[#1947] Re: [Dist] Mutex module — matz@... (Yukihiro Matsumoto) 1997/01/29

まつもと ゆきひろです.

[#1960] Re: [Dist] Mutex module — sinara@... 1997/01/30

原です。

[#1969] Re: [Dist] Mutex module 1997/01/30

けいじゅ@SHLジャパンです.

[#1978] Re: [Dist] Mutex module — sinara@... 1997/01/30

原です。

[#1986] Re: [Dist] Mutex module 1997/01/30

けいじゅ@SHLジャパンです.

[#1989] Array as list/tupple (Re: [Dist] Mutex module) — matz@... (Yukihiro Matsumoto) 1997/01/31

まつもと ゆきひろです.

[#2008] [Request] static var? (Re: Array as list/tupple) — sinara@... 1997/01/31

原です。

[#1953] open (file descriptor) — j_kuro@... (Jun Kuroda)

黒田です.

16 messages 1997/01/29

[ruby-list:1991] Mutex_m

From: keiju@... (Keiju ISHITSUKA)
Date: 1997-01-31 04:53:18 UTC
List: ruby-list #1991
けいじゅ@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 <----

In This Thread

Prev Next