日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pthread_cancel、pthread_equal函数

發布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pthread_cancel、pthread_equal函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)pthread_cancel函數

int pthread_cancel(pthread_t thread);??? 成功:0;失敗:錯誤號

作用:殺死(取消)線程,其作用對應進程中 kill() 函數。

注意:線程的取消并不是實時的,而有一定的延時。需要等待線程到達某個取消點(檢查點)。殺死線程不是立刻就能完成,必須要到達取消點取消點:是線程檢查是否被取消,并按請求進行動作的一個位置。通常是一些系統調用creat,open,pause,close,read,write等等。執行命令man 7 pthreads可以查看具備這些取消點的系統調用列表。也可參閱 APUE.12.7 取消選項小節。

可粗略認為一個系統調用(進入內核)即為一個取消點。如線程中沒有取消點,可以通過調用pthread_testcancel( )函數自行設置一個取消點,即在子線程的執行的函數中調用該函數即可:pthread_testcancel( );? 該函數是庫函數,但執行該庫函數需要進一步使用系統調用,從而到達檢查點。只要線程到達檢查點,如果有其它線程對其調用了pthread_cancel函數,則該線程就會自動終止。

被取消的線程,退出值為常數PTHREAD_CANCELED的值是-1。可在頭文件pthread.h中找到它的定義#define PTHREAD_CANCELED ((void *) -1)。因此當我們對一個已經被取消的線程使用pthread_join回收時,得到的返回值為-1。

//終止線程的三種方法。注意“取消點”的概念。

#include <stdio.h> #include <unistd.h> #include <pthread.h> #include <stdlib.h>void *tfn1(void *arg) //方法1:retun {printf("thread 1 returning\n");return (void *)111; }void *tfn2(void *arg) //方法2:pthread_exit {printf("thread 2 exiting\n");pthread_exit((void *)222); }void *tfn3(void *arg) //方法三:pthread_cancel {while (1) {printf("thread 3: I'm going to die in 3 seconds ...\n"); //取消點sleep(1); //同樣是取消點 //pthread_testcancel(); //自己添加取消點}return (void *)666; }int main(void) {pthread_t tid;void *tret = NULL;pthread_create(&tid, NULL, tfn1, NULL);pthread_join(tid, &tret);printf("thread 1 exit code = %d\n\n", (int)tret);pthread_create(&tid, NULL, tfn2, NULL);pthread_join(tid, &tret);printf("thread 2 exit code = %d\n\n", (int)tret);pthread_create(&tid, NULL, tfn3, NULL);sleep(3);pthread_cancel(tid);pthread_join(tid, &tret);printf("thread 3 exit code = %d\n", (int)tret);return 0; }

[root@localhost 01_pthread_test]# ./pthrd_endof3

thread 1 returning

thread 1 exit code = 111

?

thread 2 exiting

thread 2 exit code = 222

?

thread 3: I'm going to die in 3 seconds ...

thread 3: I'm going to die in 3 seconds ...

thread 3: I'm going to die in 3 seconds ...

thread 3 exit code = -1

分析:

  • 線程3執行的函數的函數體中的printf函數會調用write系統調用;sleep函數會調用pause系統調用;而pthread_testcancel也會調用系統調用,因此這三個函數都是取消點;
  • 如果線程3執行的函數的函數體中的while循環體為空(即刪除上述三個函數),則該子線程將會永遠不會被殺死,而主控線程將會永遠阻塞等待回收子線程。這都是由于子線程沒有取消點的原因,因此可以自己加取消點:pthread_testcancel。
  • 終止某個線程而不終止整個進程,有三種方法:從線程主函數return,這種方法對主控線程不適用,從main函數return相當于調用exit;一個線程可以調用pthread_cancel終止同一進程中的另一個線程;線程可以調用pthread_exit終止自己。
  • (2)pthread_equal函數

    int pthread_equal(pthread_t t1, pthread_t t2);

    作用:比較兩個線程ID是否相等。

    返回值:相等返回非0值,不等返回0值。

    由于目前的Linux系統中,線程ID類型為大于0的整數,因此可以用==直接比較是否相等;設置該函數是因為有可能Linux在未來線程ID pthread_t 類型被修改為結構體實現,因此==就無法直接判斷。

    總結

    以上是生活随笔為你收集整理的pthread_cancel、pthread_equal函数的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 精品视频第一页 | 1024手机在线观看 | 亚洲av综合色区无码一区 | 精品福利一区二区三区 | 国产午夜不卡 | 熟妇高潮一区二区三区 | 丁香婷婷久久 | 久在操 | 粗大黑人巨茎大战欧美成人免费看 | 亚洲三级在线看 | 国产精品久久久久久久蜜臀 | 一区二区三区在线视频观看 | 精品国产乱码久久久久久88av | 看黄网站在线观看 | 梦梦电影免费高清在线观看 | 精品久久久久久久久久久久久久久久久 | 国产精品欧美激情在线播放 | 用力使劲高潮了888av | 久草色在线 | 日本一区不卡在线 | 国产日本在线观看 | 男女日批免费视频 | 91最新地址| 久久国产a| 亚洲天堂导航 | 狠狠撸在线 | 美女高潮黄又色高清视频免费 | 大桥未久av在线播放 | 久久99网 | 亚洲制服丝袜在线播放 | 美色视频 | 日本国产精品视频 | 日本一区二区三区视频在线 | 国产福利片在线 | 银杏av| 欧美一级性生活 | 欧美日韩电影一区二区三区 | 日韩亚洲欧美在线观看 | 日视频| 欧美激情动态图 | 国产精品视频www | 99久久久久成人国产免费 | 国产xxxx在线观看 | 91精品久久久久久 | 成人av中文解说水果派 | 国产肥老妇视频 | 激情小视频在线观看 | 国产精品老女人 | av污| 欧美三日本三级少妇三级99观看视频 | 欧美放荡办公室videos4k | 亚洲视频三区 | 黄色片91| 久99久视频 | 岛国av免费观看 | 亚洲人性生活视频 | 狠狠干天天 | 国产一区二区三区四区hd | 久操色 | juliaann欧美二区三区 | 日本少妇一区 | 日日摸天天爽天天爽视频 | 欧美国产在线一区 | 丰满人妻翻云覆雨呻吟视频 | 国产成人亚洲精品无码h在线 | 韩国女主播一区二区 | 麻豆精品在线视频 | 神马午夜在线 | 亚洲 国产 日韩 欧美 | 97色婷婷 | 国产又爽又黄的视频 | jizz视频在线观看 | 影音先锋在线视频 | 久草热线 | 欧美亚洲 | 色婷婷777 | 午夜精品在线观看 | 97日韩精品| 国内成人自拍视频 | 黄瓜视频色版 | 一级黄色片网站 | a免费视频 | 内射后入在线观看一区 | 国产精品爽 | 老湿影院av| 干爹你真棒插曲免费 | 精品久久久久久久中文字幕 | 欧美人妖69xxxxxhd3d | 国产女人水真多18毛片18精品 | 免费九九视频 | 中文字幕第七页 | 欧美福利一区二区 | 91精品国自产在线 | 国产精品久久久久毛片大屁完整版 | 猎艳山村丰满少妇 | 免费国产小视频 | 国产精品大全 | 尤物视频官网 | 久久网伊人 |