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

Yasushi SHOJI email@hidden
2010年 9月 2日 (木) 21:02:01 JST


At Thu, 2 Sep 2010 19:17:56 +0900 (JST),
K++ wrote:
> 
> ■問題:
> mainを含む5このスレッドなのにpsでは6個になっている.な
> ぜでしょうか?

http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html#D.5

NPTLではなく、LinuxThreadだからです。

どの 実装が使われているかは、↓でわかります。

	#include <unistd.h>
	#include <stdio.h>
	
	int main(int argc, char *argv[])
	{
		char buf[1024];
		size_t s;
		s = confstr(_CS_GNU_LIBPTHREAD_VERSION, buf, 1024);
		buf[s] = '\0';
		printf("%s\n", buf);
	
		return 0;
	}

> ■問題:プログラムの終了
> やりたいこと:
> [1101-1106]のどれかをkillしてもプログラムが終了する.と
> にかく一回のkillで全部終了できるようにしたい.

普通は、全部死ぬはずです。

http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html#J.2

ただし、uninterruptible sleepの threadがあるなら kill しても死にません。

http://en.wikipedia.org/wiki/Sleep_%28operating_system%29#Uninterruptible_sleep

uninterruptible stateのプロセス/スレッドは、psで見ると「D」という
ステートになっているので見分けることができます。

> 現状:
> [1101-1106]のどれかkill -SIGINTしても,反応しないあるい
> は2個のスレッドが減り,4個が残る.残りの4個にkillしても
> 無反応
> 
> Armadillo上ではなく通常のPCではこのような問題が起きませ
> んでした.

ATDEv2や最近の PC Linuxで使われる Pthreadの実装は、NPTLです。
NPTLは LinuxThread のだめなところを直すために実装されました。
古い実装の LinuxThreadとは挙動が異なります。
-- 
          yashi




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