最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

分享到微博請遵守國家法律
商城县| 新昌县| 苏尼特左旗| 阿拉善右旗| 永顺县| 牙克石市| 泸定县| 衡南县| 揭东县| 江口县| 舟曲县| 清河县| 上思县| 巴林右旗| 苏尼特左旗| 海口市| 江阴市| 绥江县| 朝阳市| 昌平区| 孟连| 盐池县| 黄骅市| 雷州市| 峨边| 宜城市| 湖口县| 确山县| 凤庆县| 社旗县| 务川| 高雄县| 阜城县| 黑山县| 安徽省| 博白县| 封丘县| 舟山市| 吉木乃县| 富民县| 石家庄市|