子執行緒中的 while 迴圈看似無限執行,想知道如何正確終止子執行緒並取得回傳值。
static int run = 1;
void *start_routine(void *arg) {
int *running = (int *)arg;
while (*running) {
printf("The child thread is running!\n");
usleep(1);
}
printf("Exit child thread\n");
retvalue = 8;
pthread_exit((void *)&retvalue);
}
int main(void) {
pthread_t pt;
pthread_create(&pt, NULL, start_routine, &run);
// 主執行緒執行其他工作...
run = 0; // 通知子執行緒結束
pthread_join(pt, (void **)&ret_join); // 等待子執行緒結束
printf("The return of thread is %d\n", *(int *)ret_join);
return 0;
}
run > 0。run 設為 0 後,子執行緒下次檢查條件時會退出迴圈。pthread_exit 可回傳指標,主執行緒透過 pthread_join 接收。