成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

linux多線程之線程資源的釋放

運(yùn)維 系統(tǒng)運(yùn)維
如果在運(yùn)行代碼這塊發(fā)生錯誤,有異常,導(dǎo)致這個線程異常退出,那么怎么辦,pthread_unlock沒有得到調(diào)用,那么這個鎖資源沒有解鎖。可以用下面的方法修改。

一般來說,對一段運(yùn)行代碼進(jìn)行加鎖然后解鎖,如下所示:

pthread_mutex_lock(&mutex);

//運(yùn)行代碼;

pthread_mutex_unlock(&mutex);

如果在運(yùn)行代碼這塊發(fā)生錯誤,有異常,導(dǎo)致這個線程異常退出,那么怎么辦,pthread_unlock沒有得到調(diào)用,那么這個鎖資源沒有解鎖。可以用下面的方法修改。

pthread_cleanup_push(pthread_mutex_unlock, (void *) &mutex);

pthread_mutex_lock(&mutex);

/* do some work */

pthread_mutex_unlock(&mutex);

pthread_cleanup_pop(0);

這樣假如運(yùn)行代碼發(fā)生錯誤時(shí)沒有調(diào)用到解鎖,pthread_cleanup_up會自動來調(diào)用,參數(shù)為0表示不執(zhí)行push進(jìn)來的函數(shù)。

但是如果是異常錯誤的話,這個參數(shù)并不影響異常終止時(shí)清理函數(shù)的執(zhí)行。

必須要注意的是,如果線程處于PTHREAD_CANCEL_ASYNCHRONOUS狀態(tài),上述代碼段就有可能出錯,因?yàn)镃ANCEL事件有可能在pthread_cleanup_push()和pthread_mutex_lock()之間發(fā)生,或者在pthread_mutex_unlock()和pthread_cleanup_pop()之間發(fā)生,從而導(dǎo)致清理函數(shù)unlock一個并沒有加鎖的mutex變量,造成錯誤。因此,在使用清理函數(shù)的時(shí)候,都應(yīng)該暫時(shí)設(shè)置成PTHREAD_CANCEL_DEFERRED模式。為此,POSIX的Linux實(shí)現(xiàn)中還提供了一對不保證可移植的pthread_cleanup_push_defer_np()/pthread_cleanup_pop_defer_np()擴(kuò)展函數(shù),功能與以下代碼段相當(dāng):

{ int oldtype;

pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);

pthread_cleanup_push(routine, arg);

...

pthread_cleanup_pop(execute);

pthread_setcanceltype(oldtype, NULL);

}

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

設(shè)置退出類型pthread_setcanceltype

#include <pthread.h>

int pthread_setcanceltype(int type, int *oldtype);

返回值:函數(shù)成功返回0。任何其他返回值都表示錯誤。

將線程退出類型設(shè)置為延遲類型或異步類型。參數(shù)type的取值為PTHREAD_CANCEL_DEFERRED或PTHREAD_CANCEL_ASYNCHRONOUS。

當(dāng)一個線程被創(chuàng)建后,缺省值是延遲類型。在異步方式下,線程可以在執(zhí)行的任何時(shí)候被退出。
 

【編輯推薦】

  1. Linux多線程同步之命名管道
  2. Linux多線程同步之消息隊(duì)列
  3. linux定時(shí)器的使用
責(zé)任編輯:趙寧寧 來源: chinaitlab
相關(guān)推薦

2021-12-26 18:22:30

Java線程多線程

2010-03-16 17:16:38

Java多線程

2021-12-14 08:28:08

Java多線程線程

2011-06-22 16:08:40

Qt 多線程 事件循環(huán)

2021-02-25 15:58:46

C++線程編程開發(fā)技術(shù)

2021-12-28 09:10:55

Java線程狀態(tài)

2021-03-05 07:38:52

C++線程編程開發(fā)技術(shù)

2013-06-07 16:30:08

iOS多線程iOS開發(fā)NSThread

2010-01-21 11:27:30

linux多線程機(jī)制線程同步

2011-06-22 16:02:37

Qt 多線程 重入

2009-06-17 11:23:00

Java多線程

2020-11-12 18:08:05

JavaLinux多線程

2017-05-27 20:59:30

Java多線程synchronize

2013-12-02 17:33:20

Linux進(jìn)程多線程

2009-03-12 10:52:43

Java線程多線程

2017-03-08 16:25:54

Linux多線程函數(shù)

2017-05-31 14:03:07

Java多線程內(nèi)置鎖與顯示鎖

2021-06-11 11:28:22

多線程fork單線程

2017-05-08 11:46:15

Java多線程

2023-06-16 08:36:25

多線程編程數(shù)據(jù)競爭
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产乱码精品一区二区三区忘忧草 | 午夜精品网站 | 亚洲性视频 | 欧美精品福利 | 国产精品国产 | 欧美男人天堂 | 国精品一区 | 国产在线中文字幕 | 国产欧美视频一区 | 五月槐花香 | 中文字幕日韩欧美一区二区三区 | 国产一区二 | 亚洲a级| 欧美亚洲国产日韩 | 日韩一区三区 | 亚洲网站在线观看 | 2020天天操 | 午夜羞羞| 97在线播放 | 久久精品国产一区二区电影 | 一区二区三区免费看 | 国产精品久久久久久久久免费 | www久久国产| 超级乱淫av片免费播放 | 欧美日韩久 | 91私密视频 | 日韩精品专区在线影院重磅 | 日韩中文字幕区 | 久久精品中文字幕 | 久免费视频 | 成年免费大片黄在线观看一级 | 日韩av中文 | 99精品国自产在线 | 日韩精品中文字幕一区二区三区 | 伊人超碰 | 一区中文| 国产精品成av人在线视午夜片 | 日韩精品一区在线观看 | 91高清在线| 97中文视频 | 91色在线|