五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ù)的評論 (共 條)

分享到微博請遵守國家法律
井陉县| 漯河市| 崇仁县| 景泰县| 昭觉县| 怀柔区| 三都| 和政县| 辛集市| 新平| 巧家县| 越西县| 耒阳市| 樟树市| 朝阳市| 山东| 余庆县| 罗田县| 闽清县| 灵石县| 民和| 淅川县| 嵊泗县| 赤峰市| 榆林市| 南澳县| 大丰市| 兴海县| 肥城市| 探索| 建始县| 兴山县| 鞍山市| 巧家县| 抚顺县| 潜山县| 日喀则市| 平和县| 浪卡子县| 泾川县| 延寿县|