[Armadillo:05763] Armadillo-300 Pthread について

K++ email@hidden
2010年 9月 2日 (木) 19:11:56 JST


Armadillo-300ユーザK++と申します.

現在Pthreadを使って下記のような流れのプログラムを作成し
ていますが,正しく終了できません.ネット上の情報だとuClinux
が原因のようですが,解決策を見つけることができなかったの
で質問させていただきます.

原因につきまして,心当たりがありましたらご教授いただけま
すと幸いです.

よろしくお願いいたします.

----------プログラム----------------
void thread1()
{
    pthread_detach(self ...);
    while( blocking_read I/O ...){
        ...
    }
}


void server1()
{
    pthread_detach(self ...);
    while(wat_client){
        ...
    }
}

void server1()
{
    pthread_detach(self ...);
    while(wait_client(...)){
        ...
    }
}

void threadSignal()
{
    ...
    sigfillset( &sigset );    
    sigprocmask( SIG_BLOCK, &sigset, 0 );
    pthread_sigmask( SIG_BLOCK, &sigset, NULL );

    switch(sigset){
        ... 
        case SIGINT:
            各サーバのsocketをclose
            pthread_exit();
        ...
    }
}

int main()
{
    ...
    sigfillset( &sigset );    
    sigprocmask( SIG_BLOCK, &sigset, 0 );
    
    pthread_create( thread1 ...);
    pthread_detach( thread1 ...);
    ...

    pthread_create( server1 ...);
    pthread_detach( server1 ...);
    ...

    pthread_create( server2 ...);
    pthread_detach( server2 ...);
    ...


    pthread_create( threadSignal ...);
    pthread_join( threadSignal ...);
    exit();
}

■問題:
mainを含む5このスレッドなのにpsでは6個になっている.な
ぜでしょうか?
    ...
    1101 root        552 S   ./program 
    1102 root        552 S   ./program 
    1103 root        552 S   ./program 
    1104 root        552 S   ./program 
    1105 root        552 S   ./program
    1106 root        552 S   ./program
    ...
    
■問題:プログラムの終了
やりたいこと:
[1101-1106]のどれかをkillしてもプログラムが終了する.と
にかく一回のkillで全部終了できるようにしたい.

現状:
[1101-1106]のどれかkill -SIGINTしても,反応しないあるい
は2個のスレッドが減り,4個が残る.残りの4個にkillしても
無反応

Armadillo上ではなく通常のPCではこのような問題が起きませ
んでした.


--------------------------------------
GyaO! - Anime, Dramas, Movies, and Music videos [FREE]
http://pr.mail.yahoo.co.jp/gyao/



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