国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 操作系統 > 正文

線程控制之取消選項

2024-06-28 13:28:11
字體:
來源:轉載
供稿:網友
線程控制之取消選項

有兩個線程屬性并沒有包含在pthread_attr_t結構中,它們是可取消狀態可取消類型。這兩個屬性影響著線程在響應pthread_cancel函數(http://www.CUOXin.com/nufangrensheng/p/3519175.html)調用時所呈現的行為。

可取消狀態屬性可以是PTHREAD_CANCEL_ENABLE,也可以是PTHREAD_CANCEL_DISABLE。線程可以通過調用pthread_setcancelstate修改它的可取消狀態。

#include <pthread.h>int pthread_setcancelstate(int state, int *oldstate);返回值:若成功則返回0,否則返回錯誤編號

pthread_setcancelstate把當前的可取消狀態設置為state,把原來的可取消狀態存放在由oldstate指向的內存單元中,這兩步是原子操作。

pthread_cancel調用并不等待線程終止,在默認情況下,線程在取消請求發出以后還是繼續運行,直到線程到達某個取消點。取消點是線程檢查是否被取消并按照請求進行動作的一個位置。POSIX.1保證在線程調用表12-7中列出的任何函數時,取消點都會出現。

                                                 表12-7 POSIX.1定義的取消點

1345694905_5425

線程啟動時的默認的可取消狀態時PTHREAD_CANCEL_ENABLE。當狀態設為PTHREAD_CANCEL_DISABLE時,對pthread_cancel的調用并不會殺死線程;相反,取消請求對這個線程來說處于未決狀態。當取消狀態再次變為PTHREAD_CANCEL_ENABLE時,線程將在下一個取消點上對所有未決的取消請求進行處理。

除了表12-7中列出的函數,POSIX.1還指定了表12-8中列出的函數作為可選的取消點。

                                                   表12-8 POSIX.1定義的可選取消點

20140112143249812

如果應用程序在很長一段時間內都不會調用到表12-7或表12-8中的函數,那么可以調用phread_testcancel函數在程序中自己添加取消點。

#include <pthread.h>void pthread_testcancel(void);

調用pthread_testcancel時,如果有某個取消請求正處于未決狀態,而且取消并沒有置為無效,那么線程就會被取消。但是如果取消被置為無效時,pthread_testcancel調用就沒有任何效果。

這里描述的默認取消類型也稱為延遲取消。調用pthread_cancel以后,在線程到達取消點之前,并不會出現真正的取消。可以通過調用pthread_setcanceltype來修改取消類型。

#include <pthread.h>int pthread_setcanceltype(int type, int *oldtype);返回值:若成功則返回0,否則返回錯誤編號

type參數可以是PTHREAD_CANCEL_DEFERRED,也可以是PTHREAD_CANCEL_ASYNCHRONOUS,pthread_setcanceltype函數把取消類型設置為type,把原來的取消類型返回到oldtype指向的整數單元。

異步取消與延遲取消不同,使用異步取消時,線程可以在任意時間取消,而不是非得遇到取消點才能被取消。

本篇博文內容摘自《UNIX環境高級編程》(第二版),僅作個人學習記錄所用。關于本書可參考:http://www.apuebook.com/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望奎县| 汽车| 时尚| 红河县| 义乌市| 钟祥市| 宜阳县| 玉门市| 金昌市| 类乌齐县| 天镇县| 项城市| 阜阳市| 从江县| 商河县| 泽库县| 潍坊市| 中阳县| 勐海县| 德兴市| 铜鼓县| 阿鲁科尔沁旗| 玛纳斯县| 丹凤县| 买车| 瑞昌市| 淮阳县| 册亨县| 永昌县| 古浪县| 汽车| 同德县| 涪陵区| 枝江市| 普安县| 南和县| 乐平市| 临洮县| 左权县| 灌云县| 虹口区|