亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Linux服務器 > 正文

Linux線程退出方式總結(推薦)

2024-09-05 23:03:27
字體:
來源:轉載
供稿:網友

在編寫多線程代碼時,經常面臨線程安全退出的問題。

一般情況下,選擇檢查標志位的方式:

在線程的while循環中,執行完例程后,都對標志位進行檢查,如果標志位指示繼續執行則再次執行例程,如果標志位設置為退出狀態,則跳出循環,結束線程的運行。

這個標志位需要主線程(或其他線程)設置,設置后,主線程調用pthread_join接口進入休眠(接口參數指定了等待的線程控制指針),子線程退出后,主線程會接收到系統的信號,從休眠中恢復,這個時候就可以去做相關的資源清除動作。

這個方法可以保證子線程完全退出,主線程再去做相關的資源清除操作

時序圖如下

linux,線程退出

但是某些應用中,或許會發生下面情況:

子線程阻塞在某個操作無法被喚醒,即使主線程設置了標志位,由于子線程進入了休眠無法醒過來,也沒有辦法去檢查標志位,這個時候調用pthread_join進入休眠的主線程等待不到子線程退出的信號,也會一直休眠,系統進入死鎖。

為了更安全地使線程退出,主線程通過pthread_cancel函數來請求取消同一進程中的其他線程,再調用pthread_join等待指定線程退出。使用pthread_cancel接口,需要了解Linux下線程的兩個屬性,可取消狀態和可取消類型,以及取消點的概念。

可取消狀態:包括PTHREAD_CANCEL_ENABLE和PTHREAD_CANCEL_DISABLE。當線程處于PTHREAD_CANCEL_ENABLE,收到cancel請求會使該線程退出運行;反之,若處于PTHREAD_CANCEL_DISABLE,收到的cancel請求將處于未決狀態,線程不會退出。線程啟動時的默認可取消狀態為PTHREAD_CANCEL_ENABLE,可以通過接口pthread_setcancelstate改變可取消狀態的屬性。

可取消類型:包括PTHREAD_CANCEL_DEFERRED和PTHREAD_CANCEL_ASYNCHRONOUS。當處于PTHREAD_CANCEL_DEFERRED,線程在收到cancel請求后,需要運行到取消點才能退出運行;如果處于PTHREAD_CANCEL_ASYNCHRONOUS,可以在任意時間取消,只要收到cancel請求即可馬上退出。線程啟動時默認可取消類型為PTHREAD_CANCEL_DEFERRED,可通過pthread_setcanceltype修改可取消類型。

取消點:線程檢查是否被取消并按照請求進行動作的一個位置。

采用PTHREAD_CANCEL_DEFERRED取消方式是因為線程可能在獲取臨界資源后(如獲取鎖),未釋放資源前收到退出信號,如果使用PTHREAD_CANCEL_ ASYNCHRONOUS的方式,無論線程運行到哪個位置,都會馬上退出,而占有的資源卻得不到釋放。

采用PTHREAD_CANCEL_DEFERRED取消方式,線程需要運行到取消點才退出,而主線程在調用pthread_cancel后,不能馬上進行線程資源釋放,必須調用pthread_join進入休眠,直至等待指定線程退出。

使用PTHREAD_CANCEL_DEFERRED方式并不能完全避免這個問題,因為無法保證在獲取臨界資源后(比如lock操作)不會進行可以作為取消點的操作(如進行sleep),此時主線程如果對該線程發送cancel信號,線程將會在不釋放鎖的情況下直接結束運行,即還是會出現在釋放資源前線程就退出的問題。

為了避免上述情況,不僅需要設置可取消類型,還需要設置可取消狀態。將獲取臨界資源-釋放臨界資源之間的代碼塊都設置成PTHREAD_CANCEL_DISABLE狀態,其余的代碼塊都設置成PTHREAD_CANCEL_ENABLE狀態,確保線程在安全的地方退出。如果在可以安全退出的代碼塊不存在取消點系統調用,可以調用pthread_testcancel函數自己添加取消點。

偽代碼描述如下:

void* subThread(void*){  pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,&oldCancleState);  …;//不存在獲取臨界資源操作,可以安全退出的代碼塊  pthread_testcancel();//如果可以安全退出的代碼塊不存在取消點操作,可以自己添加pthread_testcancel調用,線程執行到這個調用就會退出  /*還有一種方法,在可以安全退出的代碼塊,我們將線程的可取消類型設置成PTHREAD_CANCEL_ ASYNCHRONOUS,這樣即使沒有取消點也可以馬上退出*/  pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,&oldCancleState);  /*存在獲取-釋放臨界資源操作,如果在lock和unlock之間的運行收到cancel信號,且可取消狀態為enable,則鎖永遠無法被釋放*/  Lock();  …;  Unlock();}void* mainThread(void*){  pthread_cancel(subThread);//給subThread發送退出信號  pthread_join(subThread,null);//進入休眠,直到subThread退出成功}

無論使用哪種方式,核心點就是要保證線程退出的時候不會獲取了某些臨界資源而無法釋放

POSIX.1定義的取消點見下:
linux,線程退出
linux,線程退出

注意:當主線程調用pthread_cancel接口后,只是將取消請求發送給指定線程,
對接口的成功調用不能保證指定線程已經退出,需要調用pthread_join等待指定線程完全退出,再進行相關資源的釋放。

以上就是小編為大家帶來的Linux線程退出方式總結(推薦)全部內容了,希望大家多多支持VEVB武林網~


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲视频在线| 国产mv免费观看入口亚洲| 日韩av中文字幕在线| 久久久久久美女| 国产精品亚洲аv天堂网| 中文字幕日韩欧美在线| 伊是香蕉大人久久| 亚洲国产成人精品一区二区| 黄网站色欧美视频| 亚洲色图25p| 狠狠躁夜夜躁人人爽超碰91| 日韩精品999| 久久99亚洲热视| 欧美在线视频在线播放完整版免费观看| 日本国产一区二区三区| 日本久久亚洲电影| 亚洲激情自拍图| 久久精品91久久久久久再现| 国产午夜精品视频免费不卡69堂| 亚洲精品福利在线| 亚洲影影院av| 在线精品国产欧美| 在线看片第一页欧美| 国产精品大陆在线观看| 国产精品露脸av在线| 国产亚洲精品久久久久久777| 日韩乱码在线视频| 国产美女精品视频免费观看| 亚洲精品99久久久久中文字幕| 国产福利视频一区二区| 日韩av免费在线观看| 亚洲午夜久久久久久久| 中文字幕在线日韩| 麻豆国产va免费精品高清在线| 亚洲国产欧美一区二区三区久久| 91亚洲永久免费精品| 成人高h视频在线| 在线视频欧美日韩精品| 欧美在线免费观看| 97色伦亚洲国产| 欧美午夜宅男影院在线观看| 最近2019中文字幕大全第二页| 欧美午夜www高清视频| 黑丝美女久久久| 伊人伊成久久人综合网站| 久久久精品视频成人| 欧美激情亚洲一区| 亚洲国产精品久久久久秋霞蜜臀| 亚洲999一在线观看www| 国产精品电影在线观看| 欧美资源在线观看| 亚洲最大在线视频| 91精品国产91久久| 亚洲精品美女久久久久| 国产成人综合精品在线| 日韩av免费看网站| 午夜精品久久久久久99热软件| 在线观看国产精品91| 精品国模在线视频| 国产视频久久久久| 神马国产精品影院av| 亚洲白拍色综合图区| 亚洲欧洲在线免费| 国产日韩视频在线观看| 欧美黑人性视频| 国内精久久久久久久久久人| 91国产精品视频在线| 黄网站色欧美视频| 中文字幕日韩欧美精品在线观看| 日韩电影免费观看中文字幕| 欧美性xxxxx| 精品久久中文字幕久久av| 国产精品综合网站| 亚洲国产小视频| 日韩一级裸体免费视频| 97成人超碰免| 成人免费视频在线观看超级碰| 欧美性猛交99久久久久99按摩| 日韩福利在线播放| 九九精品视频在线| 国产激情久久久久| 欧美性少妇18aaaa视频| 亚洲字幕一区二区| 俺去啦;欧美日韩| 午夜精品久久久久久99热| 日韩大陆毛片av| 色999日韩欧美国产| 欧美视频免费在线观看| zzijzzij亚洲日本成熟少妇| 国产精品wwwwww| 欧美黄色片视频| 欧美日韩电影在线观看| 久久久久久久91| 国产做受高潮69| 7777精品视频| 久久久久久国产三级电影| 91久久精品一区| 欧美激情图片区| 色综合五月天导航| 亚洲色图欧美制服丝袜另类第一页| 中文字幕日韩av综合精品| 亚洲护士老师的毛茸茸最新章节| 日韩精品中文字幕视频在线| …久久精品99久久香蕉国产| 日韩精品视频免费专区在线播放| 欧美一级黑人aaaaaaa做受| 久久久久久久影院| 久久久久久国产| 国产不卡一区二区在线播放| 日韩高清免费观看| 久久九九有精品国产23| 亚洲图片欧美日产| 欧美激情一级欧美精品| 欧美性理论片在线观看片免费| 日韩精品久久久久久福利| 亚洲va欧美va国产综合剧情| 国产精品亚洲视频在线观看| 日韩福利视频在线观看| 久久男人资源视频| 久久精品这里热有精品| 国产不卡精品视男人的天堂| 亚洲欧洲免费视频| 狠狠操狠狠色综合网| 国产精品免费视频久久久| 4k岛国日韩精品**专区| 亚洲国产欧美一区二区三区久久| 亚洲欧美自拍一区| 欧美色道久久88综合亚洲精品| 日韩欧美亚洲范冰冰与中字| 亚洲午夜未删减在线观看| 国产免费一区二区三区香蕉精| 亚洲精品之草原avav久久| 在线播放日韩专区| 国产乱人伦真实精品视频| 欧美日韩国产在线| 日韩欧美中文在线| 日韩欧美亚洲综合| 亚洲精品720p| 欧美精品videofree1080p| 久久久91精品国产一区不卡| 性色av一区二区三区在线观看| 日本精品性网站在线观看| 亚洲欧洲日产国产网站| 成人www视频在线观看| 中文字幕在线看视频国产欧美在线看完整| 欧美性生活大片免费观看网址| 91精品久久久久久久久中文字幕| 久久精品久久精品亚洲人| 欧美成人免费大片| 日韩欧美在线视频免费观看| 欧美综合一区第一页| 亚洲四色影视在线观看| 日本精品免费观看| 亚洲影院在线看| 亚洲丁香久久久| 色樱桃影院亚洲精品影院| 少妇高潮久久77777| 高清日韩电视剧大全免费播放在线观看| 97高清免费视频| 国产91精品久久久久久| 在线色欧美三级视频| 91精品国产高清| 日韩av最新在线观看| 亚洲精品不卡在线|