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

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

運維 系統運維
如果在運行代碼這塊發生錯誤,有異常,導致這個線程異常退出,那么怎么辦,pthread_unlock沒有得到調用,那么這個鎖資源沒有解鎖。可以用下面的方法修改。

一般來說,對一段運行代碼進行加鎖然后解鎖,如下所示:

pthread_mutex_lock(&mutex);

//運行代碼;

pthread_mutex_unlock(&mutex);

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

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

pthread_mutex_lock(&mutex);

/* do some work */

pthread_mutex_unlock(&mutex);

pthread_cleanup_pop(0);

這樣假如運行代碼發生錯誤時沒有調用到解鎖,pthread_cleanup_up會自動來調用,參數為0表示不執行push進來的函數。

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

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

{ int oldtype;

pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);

pthread_cleanup_push(routine, arg);

...

pthread_cleanup_pop(execute);

pthread_setcanceltype(oldtype, NULL);

}

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

設置退出類型pthread_setcanceltype

#include <pthread.h>

int pthread_setcanceltype(int type, int *oldtype);

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

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

當一個線程被創建后,缺省值是延遲類型。在異步方式下,線程可以在執行的任何時候被退出。
 

【編輯推薦】

  1. Linux多線程同步之命名管道
  2. Linux多線程同步之消息隊列
  3. linux定時器的使用
責任編輯:趙寧寧 來源: chinaitlab
相關推薦

2021-12-26 18:22:30

Java線程多線程

2010-03-16 17:16:38

Java多線程

2021-12-28 09:10:55

Java線程狀態

2021-03-05 07:38:52

C++線程編程開發技術

2021-12-14 08:28:08

Java多線程線程

2011-06-22 16:08:40

Qt 多線程 事件循環

2021-02-25 15:58:46

C++線程編程開發技術

2010-01-21 11:27:30

linux多線程機制線程同步

2013-06-07 16:30:08

iOS多線程iOS開發NSThread

2011-06-22 16:02:37

Qt 多線程 重入

2009-06-17 11:23:00

Java多線程

2020-11-12 18:08:05

JavaLinux多線程

2013-12-02 17:33:20

Linux進程多線程

2009-03-12 10:52:43

Java線程多線程

2017-05-27 20:59:30

Java多線程synchronize

2017-05-08 11:46:15

Java多線程

2023-06-16 08:36:25

多線程編程數據競爭

2021-06-11 11:28:22

多線程fork單線程

2017-03-08 16:25:54

Linux多線程函數

2025-06-25 06:18:46

Linux多線程機制
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91色在线视频 | 日韩激情在线 | 精品日韩欧美一区二区 | 毛片免费在线 | 自拍偷拍第一页 | 91精品国模一区二区三区 | 伊人网在线看 | 日韩成人免费视频 | 一区二区电影网 | 欧洲精品久久久久毛片完整版 | 深夜福利影院 | 美女黄视频网站 | 免费黄色片在线观看 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 在线欧美| 国产美女自拍视频 | 久久国产精品免费视频 | 久久精品视频12 | 激情91| 久久99蜜桃综合影院免费观看 | 久久久久国产精品午夜一区 | 成人国产网站 | 日韩欧美三级电影 | 免费观看一级毛片视频 | 日韩一区二区精品 | 亚洲网站在线观看 | a级片在线观看 | 国产精品久久久久9999鸭 | 啪啪免费 | 欧美日韩亚洲系列 | 美女爽到呻吟久久久久 | 日韩一二三区视频 | 国产成人免费视频 | 中文字幕av网 | 国产精品色 | 精品欧美一区二区三区久久久小说 | 国产精品一区二区欧美黑人喷潮水 | 国产 欧美 日韩 一区 | 国产欧美在线观看 | 欧美一区二区三区在线看 | 中文字幕成人在线 |