[#1381] bound method — shugo@... (Shugo Maeda)

前田です。

21 messages 1998/02/04
[#1383] Re: bound method — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#1384] Re: bound method — keiju@... (石塚圭樹 ) 1998/02/05

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

[#1385] Re: bound method — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#1387] Re: bound method — keiju@... (石塚圭樹 ) 1998/02/05

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

[#1388] Re: bound method — matz@... (Yukihiro Matsumoto) 1998/02/05

まつもと ゆきひろです

[#1389] Re: bound method — keiju@... (石塚圭樹 ) 1998/02/05

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

[#1396] Re: bound method — matz@... (Yukihiro Matsumoto) 1998/02/06

まつもと ゆきひろです

[#1410] GD — Masao Kanemitsu <masao-k@...>

30 messages 1998/02/10
[#1411] Re: GD — matz@... (Yukihiro Matsumoto) 1998/02/10

まつもと ゆきひろです

[#1413] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/10

わたなべです.

[#1417] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/10

<199802100623.PAA03533@eban.ase.ptg.sony.co.jp> の、

[#1420] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/10

わたなべです.

[#1426] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/10

<199802100733.QAA04028@eban.ase.ptg.sony.co.jp> の、

[#1428] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/10

わたなべです.

[#1429] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/10

<199802100757.QAA04212@eban.ase.ptg.sony.co.jp> の、

[#1431] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/10

わたなべです.

[#1434] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/12

<199802100952.SAA04346@eban.ase.ptg.sony.co.jp> の、

[#1435] Re: GD — WATANABE Hirofumi <watanabe@...> 1998/02/12

わたなべです.

[#1436] Re: GD — Masao Kanemitsu <masao-k@...> 1998/02/12

<199802120449.NAA00398@eban.ase.ptg.sony.co.jp> の、

[ruby-dev:1520] SizedQueue and some question

From: keiju@... (Keiju ISHITSUKA)
Date: 1998-02-24 07:59:38 UTC
List: ruby-dev #1520
けいじゅ@日本ラショナルソフトウェアです.

SizedQueueで途中で max size が帰られると良いと思ったんですが...

class SizedQueue<Queue
  attr :max

  def max=(max)
    if @max <= max
      @max = max
    else
      @max = max
      while @que.length < @max
	t = @queue_wait.shift
	t.run if t
      end
    end
  end
end

上記のような定義でOKなんでしょうか? Thread.criticalの問題と, 待ちになっ
ていたスレッドが動き出してもすぐに@queにpushされないので, その間にこち
らのwhile loopが動いてしまうのではないかと??

あと, ちょっと気になったのですが:

class SizedQueue
  def push(obj)
#-->Thread.critical = TRUE
    while @que.length >= @max
      @queue_wait.push Thread.current
      Thread.stop
    end
    super
  end

  def pop(*args)
#-->Thread.critical = TRUE
    if @que.length < @max
      t = @queue_wait.shift
      t.run if t
    end
    pop = super
    pop
  end
end

一応, ``#-->Thread.critical = TRUE'' があった方がよかないですか? 

あと, もう1つこれは質問かな?

class Queue
  def pop non_block=FALSE
    item = nil
    until item
      Thread.critical = TRUE
      if @que.length == 0
	if non_block
	  Thread.critical = FALSE
	  raise ThreadError, "queue empty"
	end
	@waiting.push Thread.current
	Thread.stop
      else
	item = @que.shift
      end
    end
    Thread.critical = FALSE
    item
  end
end

この様に,

  Thread.critical = TRUE

して, 最後に

  Thread.critical = FALSE

していますが,

  back, Thread.critical = Thread.critical, TRUE

  Thread.critical = back

の組合せの方が良くないですか? それとも, そういう必要はないんですかね?

__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread

Prev Next