の に問題が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;
}
}