无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

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

線程基本操作 (4)線程的取消

2022-09-25 14:52 作者:GXTon_阿通  | 我要投稿

應(yīng)用場景:

比如,在搜索東西的時候.每個線程負責搜索一個目錄,當有一個線程搜索到了要找的內(nèi)容.那么其他所有線程就沒有尋找的必要了.所以就可以取消搜索線程.程序進行下一步操作了...

pthread_join()和wait()性質(zhì)一樣,是不能收回正在運行的線程的.
所以需要新的函數(shù): pthread_cancel()

如果想要殺死一個線程,就先用 pthread_cancel() 然后再用 pthread_join().

用man查一下:

注意問題:

如果一個線程A中正在運行著程序,打開了很多文件。
線程B? 要取消 線程A, 這個時候,線程A里面的文件都沒有來的及關(guān)閉,就會有bug。
怎么解決,就是在線程A每次打開一個文件的時候,就要掛一個鉤子函數(shù),鉤子函數(shù)負責關(guān)閉對應(yīng)的文件。

但是上面還有一個問題。如果沒有來得及掛鉤子函數(shù)呢?
這里涉及到取消狀態(tài)的問題。

被取消的線程A,可以設(shè)置:
不允許取消:對取消信號不理睬.
允許取消: 異步取消;推遲取消(推遲到cancel點再相應(yīng)。cancel點 POSIX規(guī)定的, 都是可能引發(fā)阻塞的系統(tǒng)調(diào)用。)
所以,沒有來及掛鉤子函數(shù)的這種情況是不會存在的,因為打開文件,掛鉤子函數(shù)之間不要有cancel點就可以了。

cancel點的設(shè)置:
pthread_setcancelstate() 設(shè)置是否被允許取消.
pthread_setcanceltype() 設(shè)置取消方式.異步cancel或推遲cancel.
pthread_testcancel()? 它本身就是一個取消點,函數(shù)本身不做什么.

線程基本操作 (4)線程的取消的評論 (共 條)

分享到微博請遵守國家法律
嵊州市| 汨罗市| 平乡县| 宁津县| 渝中区| 噶尔县| 油尖旺区| 房产| 乌鲁木齐市| 香港| 衡南县| 普格县| 镇安县| 区。| 梁河县| 彝良县| 玉林市| 平度市| 乾安县| 龙胜| 罗甸县| 韶山市| 黑河市| 图木舒克市| 云梦县| 五大连池市| 班玛县| 马尔康县| 防城港市| 东光县| 米易县| 灌云县| 曲水县| 含山县| 和硕县| 封开县| 佛教| 嘉禾县| 鹤岗市| 牟定县| 枝江市|