[Armadillo:05767] Re: Armadillo-300 Pthread について

Yasushi SHOJI email@hidden
2010年 9月 3日 (金) 16:21:56 JST


At Fri, 3 Sep 2010 12:40:03 +0900 (JST),
K++ wrote:
> 
> スレッドの個数についてはわかりました.使用しているpthread
> のバージョンを調べたところ,linuxthreads-0.10でした.
> 
> > ただし、uninterruptible sleepの threadがあるなら
> > kill しても死にません。
> 
> > uninterruptible stateのプロセス/スレッドは、
> > psで見ると「D」という
> > ステートになっているので見分けることができます。
> 
> 確かにblockingタイプのread,recvを使用していたのでこれに
> 引っ掛かりました.終了できない原因もわかりました.ありが
> とうございます.ただし,psで確認するとステートが「D」で
> はなくなぜか「S」になっていました(??)

blocking i/o の中に、以下の2種類があります。

 - interruptible sleep (S)
 - uninterruptible sleep (D)

で、今回 read/recv でひっかかっていたなら SIGTERM が処理されていたって
ことでしょうかね? SIGKILL だと変る?

> これはlinuxthreadsの仕様なら,このままlinuxthreadsを使う
> 場合はnon-blockingタイプに修正するしかない?また

blockingと uninterruptible は異なるので、大丈夫なはずです。

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/signal.7.html#lbAL

も確認してください。

> NPTLを使用したい場合は何をすればよいのでしょうか?

libc のバージョンを上げる必要があります。

> > ATDEv2や最近の PC Linuxで使われるPthreadの実装は、
> > NPTLです。
> > NPTLは LinuxThreadのだめなところを直すために実装
> > されました。
> > 古い実装の LinuxThreadとは挙動が異なります。
> 
> これについてはわからないことが一つあります.私は
> atmark-dist-20090318,armadillo300 2.6.12.5-at8を
> 使用しています.libpthreadはatmark-dist-20090318の
> もので,ATDE v2を使用しているのにNPTLではないのは
> なぜでしょうか?

ATDEv2 と書いたのは、PC上で動いているATDEのことです。
前のメールに添付したコードを ATDEの中で実行してみてください。
NPTLと出ると思います。

ATDEv2と armadillo用のライブラリバージョンは、同じにしてあります。
しかし、ATDEv2の時代には NPTL に ARMのサポートが入っていなかったので、
Armadillo上で動くARM用の libc には、linuxthreadが入っています。
-- 
             yashi




armadillo メーリングリストの案内