1. 程式人生 > >linux執行緒的取消(終止)

linux執行緒的取消(終止)

//pthread_mutex_unlock(&mutex);   //如果加上這句話,將會有好幾個執行緒找到主函式中設定的值pid
printf("Thread %lx found the number!\n",tid);

for(j = 0;j<THREAD_MAX;j++)
{
if(thread[j]!=tid)
{
pthread_cancel(thread[j]);
}
}

break;
}
if(ntries%100 == 0)
{
h++;
/*執行緒阻塞,其他執行緒爭奪資源,或者是等待pthread_cancel函式傳送cancel訊號終止執行緒*/
pthread_testcancel();
/*這是為了弄明白pthread_testcancel函式的作用而設定的程式碼段
*/
if(h == 10000)
{
h = 0;
printf("----------thread num %lx-------------\n",tid);
}
}
}
pthread_cleanup_pop(0);
return (void *)0;
}


int main()
{
int i,pid;

pid = getpid(); //設定要查詢的數

pthread_mutex_init(&mutex,NULL);
printf("Search the num of %d\n",pid);
for(started = 0; started < THREAD_MAX; started++)
{
pthread_create(&thread[started],NULL,(void *)Search_Num,(void *)pid);
}

for(i = 0; i < THREAD_MAX; i++)
{
printf("-----------i = %d--------------\n",i);
pthread_join(thread[i],NULL);
}
printf("It took %d tries ot find the number!\n",tries);
return 0;
}