日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

POSIX多线程API函数

發布時間:2024/7/19 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 POSIX多线程API函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?創建

int pthread_create(pthread_t* tidp,const pthread_attr_t* attr,void* (*start_rtn)(void*), void* arg )

tidp:事先創建好的pthread_t類型的參數。成功時tidp指向的內存單元被設置為新創建線程的線程ID。

attr:定義新線程的一些屬性(配置項),包括線程棧[stack]、分離狀態[detach?state]等,大部分情況下默認值即可(NULL)

start_rtn:線程運行函數的地址,新創建的線程從start_rtn函數的地址開始運行

arg:start_rtn函數的參數。無參數時設為NULL即可。有參數時輸入參數的地址。

如果調用成功,創建出一個新線程執行函數start_rtn(arg),線程號會被填入tidp,調用處收到返回值0,繼續執行后續代碼。如果調用失敗返回非0錯誤碼。

等待結束?

int pthread_join(pthread_t tid, void** thread_return)

以阻塞的方式等待tid指定的線程結束,當函數返回時,被等待的線程資源被收回。如果線程已經結束,那么該函數會立即返回。

退出

一個線程可以通過以下3種方式結束:

  • 在線程執行體內執行return語句
  • pthread_exit():在線程函數中調用pthread_exit()來退出線程執行
  • pthread_cancel(pthread_t?tid):向一個線程發送一個取消請求。
  • 發送信號

    int pthread_kill(pthread_t threadId, int signal);

    向線程發送一個信號。返回值:成功返回0,失敗返回失敗碼。

    獲取線程ID

    pthread_t pthread_self(void);

    線程分離:

    int pthread_detach(pthread_t tid);

    ?返回值:成功返回0,失敗返回錯誤號。

    線程分離就是當線程被設置為分離狀態后,線程結束時,它的資源會被系統自動的回收,而不再需要在其它線程中對其進行 pthread_join() 操作。

    為什么線程分離

    在我們使用默認屬性創建一個線程的時候,線程是 joinable 的。 joinable 狀態的線程,必須在另一個線程中使用 pthread_join() 等待其結束,如果一個 joinable 的線程在結束后,沒有使用 pthread_join() 進行操作,這個線程就會變成”僵尸線程”。每個僵尸線程都會消耗一些系統資源,當有太多的僵尸線程的時候,可能會導致創建線程失敗。

    一個簡單的例子:

    void* worker(void* arg) {//do somethingreturn (void*)ret; } int main(int argc, char* argv[]) {pthread_t tid; if (pthread_create(&tid, NULL, worker, &task) != 0) {return -1; } void* ret; pthread_join(tid, &ret); return (int)ret; }

    總結

    以上是生活随笔為你收集整理的POSIX多线程API函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。