0

の に問題がarray[MAX]ありp_threadます。配列がいっぱいになったら、最初の位置に戻ってpthread_join(array[0], NULL). 後で、 を取得しようとするとpthread_create(array[0] ... .. )、すべて失敗します。

これは失敗する機能であり、ソケットを介してクライアントと通信するサーバーの一部です。最も奇妙なことは、wlist[]のインデックスをインクリメントすることにした場合、実行がうまくいくことです(未定義のスペースは書き込みです)....

私は何を間違っていますか?

typedef struct worker_t {
    pthread_t tid;
    int channel;
    int libero;
} worker_t;

worker_t wlist[THREADMAX];

static int dispatcher(){
    int test = -1;
    int count = 0;
    int i = 0 ;
    int client_channel;
    while(pending_sig == 0){
        if((client_channel = acceptConnection(channel_fd)) == -1){
            if (errno == EINTR){
                continue;
                }else{
                perror(ACCEPTCON);
                return -1;
            }
        }
        while(wlist[i].tid != 0 ){
            i++;
            count ++;
            if ( count >= THREADMAX){
                if(i >= THREADMAX){
                    i = 0;
                }
                pthread_join((wlist[i].tid),NULL);
                break;
            }

            wlist[i].channel = client_channel;


            if ( pthread_create(&(wlist[i].tid), NULL, worker_start,
                  &(wlist[i].channel)) != 0) {
                perror(THRCREATE);
                return -1;
            }
        }

        return 0;
    }
}
4

0 に答える 0