linux 线程pthread_detach,linux线程之pthread_join和pthread_detach
在任何一個時間點上,線程是可結合的(joinable)或者是分離的(detached)。一個可結合的線程能夠被其他線程收回其資源和殺死。在 被其他線程回收之前,它的存儲器資源(例如棧)是不釋放的。相反,一個分離的線程是不能被其他線程回收或殺死的,它的存儲器資源在它終止時由系統(tǒng)自動釋放。
默認情況下,線程被創(chuàng)建成可結合的。為了避免存儲器泄漏,每個可結合線程都應該要么被顯示地回收,即調(diào)用pthread_join;要么通過調(diào)用pthread_detach函數(shù)被分離。
int pthread_join(pthread_t tid, void**thread_return);
若成功則返回0,若出錯則為非零。
線程通過調(diào)用pthread_join函數(shù)等待其他線程終止。pthread_join函數(shù)分阻塞,直到線程tid終止,將線程例程返回的(void*)
指針賦值為thread_return指向的位置,然后回收已終止線程占用的所有存儲器資源。
int pthread_detach(pthread_t tid);
若成功則返回0,若出錯則為非零。
pthread_detach用于分離可結合線程tid。線程能夠通過以pthread_self()為參數(shù)的pthread_detach調(diào)用來分離它們自己。
如果一個可結合線程結束運行但沒有被join,則它的狀態(tài)類似于進程中的Zombie Process,即還有一部分資源沒有被回收,所以創(chuàng)建線程者應該調(diào)用pthread_join來等待線程運行結束,并可得到線程的退出代碼,回收其資源。
由于調(diào)用pthread_join后,如果該線程沒有運行結束,調(diào)用者會被阻塞,在有些情況下我們并不希望如此。例如,在Web服務器中當主線程為每個新
來的連接請求創(chuàng)建一個子線程進行處理的時候,主線程并不希望因為調(diào)用pthread_join而阻塞(因為還要繼續(xù)處理之后到來的連接請求),這時可以在
子線程中加入代碼
pthread_detach(pthread_self())
或者父線程調(diào)用
pthread_detach(thread_id)(非阻塞,可立即返回)
這將該子線程的狀態(tài)設置為分離的(detached),如此一來,該線程運行結束后會自動釋放所有資源。
linux線程之pthread_join
pthread_join使一個線程等待另一個線程結束. 代碼中如果沒有pthread_join:主線程會很快結束從而使整個進程結束,從而使創(chuàng)建的線程沒有機會開始執(zhí)行就結束了.加入pthread_joi ...
Linux編程之ICMP洪水攻擊
我的上一篇文章里使用ICMP協(xié)議實現(xiàn)了PING的程序,ICMP除了實現(xiàn)這么一個PING程序,還有哪些不為人知或者好玩的用途?這里我將介紹ICMP另一個很有 ...
iOS多線程之8.NSOPeration的其他用法
本文主要對NSOPeration的一些重點屬性和方法做出介紹,以便大家可以更好的使用NSOPeration. 1.添加依賴 - (void)addDependency:(NSOperation * ...
python 線程之 threading(四)
python 線程之 threading(三)?http://www.cnblogs.com/someoneHan/p/6213100.html中對Event做了簡單的介紹. 但是如果線程打算一遍一遍 ...
python 線程之 threading(三)
python 線程之 threading(一)http://www.cnblogs.com/someoneHan/p/6204640.html python 線程之 threading(二)http: ...
python 線程之_thread
python 線程之_thread _thread module: 基本用法: def child(tid): print("hello from child",tid) _thr ...
Java多線程之ConcurrentSkipListMap深入分析(轉(zhuǎn))
Java多線程之ConcurrentSkipListMap深入分析 ? 一.前言 concurrentHashMap與ConcurrentSkipListMap性能測試 在4線程1.6萬數(shù)據(jù)的條件下, ...
【C#】線程之Parallel
在一些常見的編程情形中,使用任務也許能提升性能.為了簡化變成,靜態(tài)類System.Threading.Tasks.Parallel封裝了這些常見的情形,它內(nèi)部使用Task對象. Parallel.Fo ...
iOS多線程之GCD小記
iOS多線程之GCD小記 iOS多線程方案簡介 從各種資料中了解到,iOS中目前有4套多線程的方案,分別是下列4中: 1.Pthreads 這是一套可以在很多操作系統(tǒng)上通用的多線程API,是基于C語言 ...
隨機推薦
Interproscan, xml文件轉(zhuǎn)化為tsv
將interproscan的結果轉(zhuǎn)化格式 很奇怪 tsv格式里沒有go, kegg, inter-domain信息,但是xml文件里面卻有,tsv文件比較好處理,所以先將xml文件轉(zhuǎn)化為tsv.用軟件 ...
Android 學習筆記之Volley(七)實現(xiàn)Json數(shù)據(jù)加載和解析...
學習內(nèi)容: 1.使用Volley實現(xiàn)異步加載Json數(shù)據(jù)... ? Volley的第二大請求就是通過發(fā)送請求異步實現(xiàn)Json數(shù)據(jù)信息的加載,加載Json數(shù)據(jù)有兩種方式,一種是通過獲取Json對象,然后 ...
[收藏]ASP.NET MVC管道詳述
ASP.NET MVC從誕生到現(xiàn)在已經(jīng)好幾個年頭了,這個框架提供一種全新的開發(fā)模式,更符合web開發(fā)本質(zhì).你可以很好的使用以及個性化和擴展這個框架,但這需要你對它有足夠的了解.這篇文章主要從整體角度總 ...
直播未來屬于RTMP還是HTTP?
直播未來屬于RTMP還是HTTP? HTTP 傳視頻比 RTMP 實現(xiàn)起來簡單?HTTP 延遲太高? 答:直播通訊未來是屬于html5的. 1,協(xié)議使用份額 如今國內(nèi)90%的面向大眾的直播平臺都是采用 ...
jQuery-彈窗登錄
在jQuery中實現(xiàn)彈窗常要用到的方法有: width() ?:元素的寬度 outerWidth() ?元素的寬度 盒子的padding+border 總的寬度 scrollTop() ?鼠標滾輪自上 ...
setjmp/longjmp 使用
C語言中有一個goto語句,其可以結合標號實現(xiàn)函數(shù)內(nèi)部的任意跳轉(zhuǎn)(通常情況下,很多人都建議不要使用goto語句,因為采用goto語句后,代碼維護工作量加大).另外,C語言標準中還提供一種非局部跳轉(zhuǎn)“n ...
Java 反射 想
所謂反射.是指在執(zhí)行時狀態(tài)中,獲取類中的屬性和方法.以及調(diào)用當中的方法的一種機制. 這樣的機制的作用在于獲取執(zhí)行時才知道的類(Class)及當中的屬性(Field).方法(Method)以及調(diào)用當中的 ...
.Net Core 學習筆記1——包、元包、框架
.Net Core 是由NuGet包(package)組成的平臺. 一起使用的多個包的集合:元包(Metapackage) package 包 (對應以前的程序集概念) Framework 框架 as ...
微服務化不同階段 Kubernetes 的不同玩法
本文由? 網(wǎng)易云發(fā)布. 作為容器集群管理技術競爭的大贏家,Kubernetes 已經(jīng)和微服務緊密聯(lián)系,采用 Kubernetes 的企業(yè)往往都開始了微服務架構的探索.然而不同企業(yè)不同階段的微服務實踐面 ...
JAVA-JAVA、JavaScript、JavaWeb的關系
相關資料:1.http://www.cnblogs.com/youring2/archive/2013/06/06/3120645.html2.https://jingyan.baidu.com/ar ...
總結
以上是生活随笔為你收集整理的linux 线程pthread_detach,linux线程之pthread_join和pthread_detach的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在linux中安装软件会出的问题,lin
- 下一篇: linux 镜像自动安装,制作能自动安装