亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

假設總共有5個線程,其中4個在read中,另一個正在處理任務。如下怎么實現

假設總共有5個線程,其中4個在read中,另一個正在處理任務。如下怎么實現

慕標琳琳 2023-03-03 18:14:56
 這時候需要停止系統做更新操作等,我希望程序的停止是在這個線程任務處理完成后才正常停止。如何做?謝謝啦~~~~pthread_cancel只要發送信號到線程了,線程接收到就退出了,那么就會造成有些任務只處理到一半。
查看完整描述

2 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

可以手動設置線程退出的時機。通過 int pthread_setcanceltype(int type, int *oldtype)設置本線程取消動作的執行時機,type由兩種取值:PTHREAD_CANCEL_DEFFERED和 PTHREAD_CANCEL_ASYNCHRONOUS,僅當Cancel狀態為Enable時有效,分別表示收到信號后繼續運行至下一個取消點再退出和 立即執行取消動作(退出);oldtype如果不為NULL則存入運來的取消動作類型值。此函數應該在線程開始時執行,若線程內部有任何資源申請等操作,應該選擇 PTHREAD_CANCEL_DEFFERED 的設定,然后在退出點(pthread_testcancel 用于定義退出點)進行線程退出。void pthread_testcancel(void)檢查本線程是否處于Canceld狀態,如果是,則進行取消動作,否則直接返回。 此函數在線程內執行,執行的位置就是線程退出的位置,在執行此函數以前,線程內部的相關資源申請一定要釋放掉,他很容易造成內存泄露。

查看完整回答
反對 回復 2023-03-06
?
米脂

TA貢獻1836條經驗 獲得超3個贊

我大致理解你的運用場景了。一般通用的做法是這樣的:在新線程的入口程序里面通常會有如下代碼段:while(sys_state != SYS_SHUT_DOWN){ if(hasJobs()) { //here process you jobs } else { sleep(nnnnn);//等著任務的到來 }}接下來的代碼就是函數返回及線程退出之前的資源回收了一般都不會主動使用thread_cancel來結束線程。線程執行的代碼段結束了,它自己會退出的,你只需要考慮什么時候讓它的代碼段結束就行了。

查看完整回答
反對 回復 2023-03-06
  • 2 回答
  • 0 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號