[#17002] strict prototype for c++ — Takaaki Tateishi <ttate@...>
立石です.
At Fri, 3 May 2002 02:59:36 +0900,
[#17017] 標準添付案 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
At Wed, 8 May 2002 19:50:17 +0900,
At Wed, 8 May 2002 22:45:06 +0900,
At Thu, 9 May 2002 00:47:46 +0900,
田中です。一応 blade は見てます。
堀之内です。
堀之内です。
At Tue, 14 May 2002 14:45:28 +0900,
[#17031] double acosh — WATANABE Hirofumi <eban@...>
わたなべです。
なかだです。
わたなべです。
まつもと ゆきひろです
わたなべです。
[#17037] here document2 つで __LINE__ がずれる — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#17053] socket in Win32 — nobu.nakada@...
なかだです。
[#17059] [PATCH] mswin32 configure — nobu.nakada@...
なかだです。
[#17060] rb_warn — Tadayoshi Funaba <tadf@...>
ふなばです。
[#17095] irb & jarh — Tanaka Akira <akr@...17n.org>
ふと、irb で jarh をいくつか試したのですが、うまく扱えないものがあるようです。
けいじゅ@日本ラショナルソフトウェアです.
In article <200205160811.RAA31441@ishitsuka.com>,
[#17112] [Cleanup] rb_thread_select() — nobu.nakada@...
なかだです。
[#17122] Array#bsearch — Beyond <beyond@...>
[#17128] Thread: deadlock trouble — nagai@...
永井@知能.九工大です.
At Fri, 17 May 2002 14:47:53 +0900,
[#17134] argv[0] — Tanaka Akira <akr@...17n.org>
ふと ruby インタプリタの C における argv[0] を知りたくなったんですが、
まつもと ゆきひろです
In article <1021723554.017958.5113.nullmailer@picachu.netlab.jp>,
In article <1021723554.017958.5113.nullmailer@picachu.netlab.jp>,
[#17144] Re: msvcrt — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
わたなべです。
こんにちは、なかむら(う)です。
こんにちは、なかむら(う)です。
なかだです。
[#17158] else without rescue — nobu.nakada@...
なかだです。
[#17179] コマンドラインオプションの順序制約 — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
[#17194] [RCR] Array#rotate{,!} — nobu.nakada@...
なかだです。
まつもと ゆきひろです
[#17208] Etc — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#17223] race condition on Queue#pop? — Tanaka Akira <akr@...17n.org>
なんとなく thread.rb を眺めていて、Queue#pop に race condition がある
なかだです。
まつもと ゆきひろです
なかだです。
[#17228] Re: [ruby-list:35305] Re: ((1.2)..(3.4)).to_a — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
たけ(tk)です。
まつもと ゆきひろです
あづみです。
[#17238] Re: [ruby-list:35304] Re: ((1.2)..(3.4)).to_a — siena@... (Siena.)
Siena. です。
[ruby-dev:17223] race condition on Queue#pop?
なんとなく thread.rb を眺めていて、Queue#pop に race condition がある
のではないかという気がしてきました。
Queue#pop は
def pop(non_block=false)
Thread.critical = true
begin
loop do
if @que.empty?
if non_block
raise ThreadError, "queue empty"
end
@waiting.push Thread.current
Thread.stop
else
return @que.shift
end
end
ensure
Thread.critical = false
end
end
というコードで、あるスレッド A が pop を呼び出し、最初に @que が空だっ
た場合、いったん Thread.stop で止まるわけですが、(他のスレッド B が
Queue#push を呼び出した結果)再開した時には Thread.critical は false に
なっているはずです。
従って、ループの 2回り目で、@que.empty? の直後にスレッドのコンテキスト
スイッチが起こる可能性があるように思います。そのタイミングで他の (上記
の Queue#push を呼び出したものとは異なるスレッド C が) Queue#pop を呼
び出すと、@que が空になり、さらにスレッド A にコンテキストスイッチして
処理を続けると空の @que を shift することになり、nil が返り値になる気
がします。
残念ながら、この問題を発現させるテストスクリプトを作ることはできません
でしたが、このようなことがおきない保証はどこかにあるでしょうか?
もし、保証できないなら、次のようなパッチを当てるといいんじゃないかと思
います。
Index: lib/thread.rb
===================================================================
RCS file: /src/ruby/lib/thread.rb,v
retrieving revision 1.12
diff -u -r1.12 thread.rb
--- lib/thread.rb 2002/05/29 05:20:39 1.12
+++ lib/thread.rb 2002/05/30 01:02:19
@@ -182,6 +182,7 @@
end
@waiting.push Thread.current
Thread.stop
+ Thread.critical = true
else
return @que.shift
end
ちなみに、return @que.shift の直前に sleep 1 unless Thread.critical と
いうコードを入れれば、問題を発現させることができました。
--
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)