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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

OS / Linux / pthread_join() 和 pthread_detach() 函数区别

發布時間:2024/10/14 linux 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OS / Linux / pthread_join() 和 pthread_detach() 函数区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、線程的兩種狀態

對于 linux 線程來說,pthread 有兩種狀態:joinableunjoinable

若線程的狀態是 joinable,當線程函數自己返回退出時或 pthread_exit() 時都不會釋放線程所占用堆棧和線程描述符(總計8K多),只有當你調用了 pthread_join() 之后這些資源才會被釋放。

若線程的狀態是 unjoinable,這些資源在線程函數退出時或 pthread_exit() 時自動會被釋放。

二、unjoinable 設置方法

unjoinable 屬性可以在 pthread_create() 時指定,或在線程創建后在線程中 pthread_detach() 自己, 如:pthread_detach(pthread_self()),將狀態改為 unjoinable 狀態,確保資源的釋放。

其實簡單的說就是在線程函數頭加上 pthread_detach(pthread_self()) 的話,線程狀態改變,在函數尾部直接 pthread_exit()線程就會自動退出,省去了給線程擦屁股的麻煩。

三、pthread_join 和 pthread_detach 區別

  • pthread_join() ,即:以阻塞的方式等待指定的線程結束。當函數返回時,被等待線程的資源被收回;如果線程已經結束,那么該函數會立即返回。上述的前提是線程必須是 joinable 的。可以這么理解,pthread_join() 函數的作用就是在main() 函數退出之前等待子線程退出,從而可以達到回收子線程剩余內存的目的。
  • pthread_detach(),即:主線程與子線程分離,子線程結束后,資源自動回收。
  • ?

    (SAW:Game Over!)

    總結

    以上是生活随笔為你收集整理的OS / Linux / pthread_join() 和 pthread_detach() 函数区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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