[#17017] 標準添付案 — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

21 messages 2002/05/08
[#17019] Re: 標準添付案 — "Akinori MUSHA" <knu@...> 2002/05/08

At Wed, 8 May 2002 19:50:17 +0900,

[#17021] Re: 標準添付案 — GOTO Kentaro <gotoken@...> 2002/05/08

At Wed, 8 May 2002 22:45:06 +0900,

[#17031] double acosh — WATANABE Hirofumi <eban@...>

わたなべです。

25 messages 2002/05/10
[#17032] Re: double acosh — nobu.nakada@... 2002/05/10

なかだです。

[#17033] Re: double acosh — WATANABE Hirofumi <eban@...> 2002/05/10

わたなべです。

[#17036] Re: double acosh — matz@... (Yukihiro Matsumoto) 2002/05/10

まつもと ゆきひろです

[#17039] Re: double acosh — WATANABE Hirofumi <eban@...> 2002/05/10

わたなべです。

[#17134] argv[0] — Tanaka Akira <akr@...17n.org>

ふと ruby インタプリタの C における argv[0] を知りたくなったんですが、

23 messages 2002/05/18
[#17139] Re: argv[0] — matz@... (Yukihiro Matsumoto) 2002/05/18

まつもと ゆきひろです

[#17144] Re: msvcrt — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

18 messages 2002/05/19

[#17179] コマンドラインオプションの順序制約 — Kazuhiro NISHIYAMA <zn@...>

西山和広です。

13 messages 2002/05/22
[#17181] Re: コマンドラインオプションの順序制約 — matz@... (Yukihiro Matsumoto) 2002/05/22

まつもと ゆきひろです

[#17228] Re: [ruby-list:35305] Re: ((1.2)..(3.4)).to_a — matz@... (Yukihiro Matsumoto)

まつもと ゆきひろです

28 messages 2002/05/30

[ruby-dev:17128] Thread: deadlock trouble

From: nagai@...
Date: 2002-05-17 05:47:53 UTC
List: ruby-dev #17128
永井@知能.九工大です.

以下に示すようなケースなんですが,どうにか改修する手はないものでしょうか?

問題は,Tk から呼び出された手続きで Thread を生成し,
その Thread の中から Tk を呼び出した際に生じます.
例えば,次を動かしたとします.
------------------------------------------------------
require 'tk'
b1 = TkButton.new(nil, 'text'=>"b1:{p 'b1'}", 'command'=>proc{p 'b1'}).pack
b2 = TkButton.new(nil, 'text'=>"b2:{Thread{p 'b2'}}", 
                  'command'=>proc{Thread.new{p 'b2'}.value}).pack
TkButton.new(nil, 'text'=>'{b1.invoke}', 'command'=>proc{b1.invoke}).pack
TkButton.new(nil, 'text'=>'{b2.invoke}', 'command'=>proc{b2.invoke}).pack
TkButton.new(nil, 'text'=>'Thread{b1.invoke}', 
                  'command'=>proc{Thread.new{b1.invoke}.value}).pack
TkButton.new(nil, 'text'=>'Thread{b2.invoke}', 
                  'command'=>proc{Thread.new{b2.invoke}.value}).pack
Tk.mainloop
------------------------------------------------------
この例で上から 4 個のボタンについては期待通りに働きます.
ですが,下 2 個のボタンについては,例えば
------------------------------------------------------
deadlock 0x4018dc30: 2:0  - /usr/local/lib/ruby/1.6/tk.rb:559
deadlock 0x401305a0: 2:8 (main) - -:8
(eval):524:in `mainloop': -:8:in `value': Thread: deadlock (fatal)
        from /usr/local/lib/ruby/1.6/tk.rb:524:in `mainloop'
        from -:11
------------------------------------------------------
というように,deadlock を生じてしまい,ダメです.

# このメッセージは ruby 1.6.1 (2000-09-27) [i586-linux] のものですが,
# 新しいバージョンでも同様のエラーを生じます.

これは,

・リソースデータベースのサポートで,Thread を使って
  外部定義手続きを特定のセーフレベルで実行したいけれど,
  そうした手続きから他の widget をいじろうとすると deadlock で落ちる.

・Tcl_DoOneEvent を使った Tk.mainloop の代換品を検討していて
  Thread{loop{TclTkLib.do_one_event(EventFlag::ALL | EventFlag::DONT_WAIT)}}
  などとしてテストしてみたら,deadlock で落ちた.

というようなことをやっていて遭遇した状況です.
Thread 周りが理解できていないもので自力では対処できませんでした.
よい対策があればぜひ教えてください.
-- 
                                         永井 秀利 (九工大 知能情報)
                                             nagai@ai.kyutech.ac.jp

In This Thread

Prev Next