2009年7月29日

[ruby-list:46240] Re: ruby1.8→1.9でprocess/thread関連でハマった話

2009/7/29 Hidetoshi NAGAI <nagai@xxxxx>:
> 永井@知能.九工大です.
>
> ちょっと恥ずかしい話ですが,似たような状況でトラブルに合う方も
> いらっしゃるかもしれないので書いておきます.(^_^;
>
> ruby 1.8 で動いていたスクリプトを 1.9 で動かそうとした際の話です.
> OS にも依存する話ですので述べておきますと,Linux 2.6.12, gcc 3.3.2 です.


問題の起こる条件について、補足。

この問題は最近の Linux では起こりません。ちょっと古めの Linux を使っている
ときに起こる問題です。具体的にはスレッドライブラリとして LinuxThreads が使
用されている場合です。
以下の URL の「POSIX スレッドの Linux での実装」を参照してください。

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html

この URL によると問題の起こる条件を以下のように場合分けできます。
glibc 2.4 以降
--> NPTL (LinuxThreads はサポート外)、すなわち問題なし。
glibc 2.3.2以降、glibc 2.4より前
--> カーネルのバージョンと設定によって、NPTL だったり、LinuxThreads だったり。
getconf GNU_LIBPTHREAD_VERSION
を実行して NPTL, LinuxThreads のどちらなのか確認するのが早道でしょう。
glibc 2.3.1以前
--> LinuxThreads、問題あり。

参照元のURL には「NPTL を利用するには Linux 2.6 カーネルに実装されている
機能が必要」と書いてあるが、これは素のカーネルの場合の話で、ディストリビューショ
ンによっては Linux 2.4 カーネルでも NPTL が使用可能になっている場合があります。
例えば Redhat Enterprise Linux ES/AS Release 3 の Linux カーネルは 2.4 ですが
NPTL に対応しています。


投稿者 xml-rpc : 2009年7月29日 22:56
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/87111
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。