首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Linux C 執行緒終止:pthread_join 與退出旗標機制實作

     編輯:程式設計綜合問答

問題描述

子執行緒中的 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 接收。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved