国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

線程 (4)線程清理函數(shù)

2022-09-25 11:32 作者:GXTon_阿通  | 我要投稿

進(jìn)程中有一個函數(shù) atexit() ,使用它可以注冊進(jìn)程終止處理函數(shù).
當(dāng)調(diào)用 exit() 退出的時(shí)候,就會執(zhí)行進(jìn)程終止處理函數(shù).
線程也有一個類似的功能,叫做"線程清理函數(shù)"( thread cleanup handler).

線程的清理函數(shù)可以注冊多個(進(jìn)程只能注冊一個).
每個線程都擁有一個清理函數(shù)棧,這些函數(shù)都記錄在棧中,棧是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu).
也就是它們執(zhí)行順序與注冊順序相反.當(dāng)執(zhí)行完所有的清理函數(shù)后,線程終止.

那么,如何向線程的棧中添加和刪除"清理函數(shù)".

這個清理函數(shù)設(shè)置好了,
就等線程退出后,觸發(fā)執(zhí)行了.
下面幾種情況下,"清理函數(shù)"會被觸發(fā)執(zhí)行:
1,線程調(diào)用 pthread_exit() 退出時(shí);
2,線程響應(yīng)取消請求時(shí);
3,用非0參數(shù)調(diào)用 pthread_cleanup_pop();

舉例:
雖然 pthread_cleanup_push() 和 pthread_cleanup_pop() 都定義成了函數(shù)形式,
但是,其都是宏定義, 類似于括號{ }的左右邊,所以這兩個需要配合成對使用!!!
需要成對使用,最好編程的時(shí)候要在一個函數(shù)里,成對調(diào)用,分開用,就容易丟...

運(yùn)行代碼:

可以編寫一個makefile 或者直接 gcc執(zhí)行.
1,直接gcc執(zhí)行:

2,另一種執(zhí)行方法 : 編寫 makefile 然后 make

makefile內(nèi)容:

執(zhí)行效果:

pthread_cleanup_push() 和 pthread_cleanup_pop()
雖然有點(diǎn)類似鉤子函數(shù),
但比鉤子函數(shù)好的是,可以進(jìn)行干預(yù),可以取消某個.在pop中傳入(0)就不會調(diào)用.


如果不成對,就會報(bào)錯,
報(bào)錯可能會出現(xiàn)在main的結(jié)尾處或者開始處的大括號部分.
如果是這樣,絕大多數(shù)是因?yàn)檎Z法錯誤.比如分號錯誤,大括號不匹配.


為什么這兩個函數(shù)是宏,可以用 gcc main.c -E 查看上述代碼,就可以看到預(yù)處理后的代碼.

-E就是展開的意思...

線程 (4)線程清理函數(shù)的評論 (共 條)

分享到微博請遵守國家法律
达州市| 泸定县| 资兴市| 万年县| 新平| 探索| 鲁甸县| 兴海县| 忻城县| 柳林县| 珠海市| 台北县| 富平县| 浦江县| 广河县| 闵行区| 澄迈县| 鄂伦春自治旗| 汕尾市| 芦溪县| 恭城| 天长市| 宁南县| 仪征市| 中山市| 藁城市| 磐石市| 海伦市| 莲花县| 定兴县| 屯昌县| 普格县| 青铜峡市| 阳曲县| 远安县| 莱阳市| 锡林郭勒盟| 孝昌县| 青神县| 河源市| 南京市|