最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言由淺入深講解線程的定義

 更新時(shí)間:2022年05月09日 11:26:07   作者:Gy648  
這篇文章主要介紹了C語(yǔ)言中線程的基礎(chǔ)知識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

線程的概念

可以簡(jiǎn)單理解為一個(gè)正在獨(dú)立運(yùn)行的函數(shù)

注:

1.posix線程是一套標(biāo)準(zhǔn)嗎,而不是實(shí)現(xiàn)

2.線程標(biāo)識(shí): phread_t,可能是整形也可能是結(jié)構(gòu)體指針等

*簡(jiǎn)單介紹關(guān)于線程標(biāo)識(shí)的函數(shù)*
 *pthread_equarl() ;判斷兩個(gè)線程標(biāo)識(shí)是否相等*
*pthread_self();返回自身的線程標(biāo)識(shí)* 

線程的創(chuàng)建

pthread_creat();

int pthread_create(

pthread_t *restrict tidp, //新創(chuàng)建的線程ID指向的內(nèi)存單元。

const pthread_attr_t *restrict attr, //線程屬性,默認(rèn)為NULL

void *(*start_rtn)(void *), //新創(chuàng)建的線程從start_rtn函數(shù)的地址開(kāi)始運(yùn)行

void *restrict arg //默認(rèn)為NULL。若上述函數(shù)需要參數(shù),將參數(shù)放入結(jié)構(gòu)中并將地址作為arg傳入。);

線程的調(diào)度取決于調(diào)度器策略

# include<stdlib.h>
# include<pthread.h>
static void* func(void* p)
{
 puts("thread is working");
 return NULL;
}
int main()
{
  pthread_t tid;
  int err;
  puts("begin!");
  err = pthread_create(&tid,NULL,func,NULL);
  if(err)
  {
   exit(-1);
  }
  puts("end!");
  exit(0);
}

線程的終止

3種方式 :

1)線程從啟動(dòng)歷程返回,返回值就是線程的退出碼

2)線程可以被同一進(jìn)程中的其他線程取消

3)線程可以調(diào)用 pthread)exit()函數(shù)

線程退出函數(shù)

void pthread_exit(void *value_ptr);

線程標(biāo)識(shí)的比較

獲取線程號(hào)

pthread_t pthread_self(void);

比較

int pthread_equal(pthread_t t1, pthread_t t2);

線程的取消

int pthread_cancel(pthread_t thread);

取消有兩種狀態(tài) : 允許和不允許

允許取消又分為: 異步cancel , 推遲 cancel(默認(rèn)) -> 推遲到cancel點(diǎn)

cancel點(diǎn): posix定義的canceldian 都是可能引發(fā)阻塞的系統(tǒng)調(diào)用

pthread_setcancelstate(int );//設(shè)置是否允許取消

pthread_setcanceltype(); //設(shè)置取消方式 異步還是推遲

注:pthread_cancel 調(diào)用具有具有一定的延時(shí)性,因?yàn)閏ancel點(diǎn): posix定義的canceldian 都是可能引發(fā)阻塞的系統(tǒng)調(diào)用,并不會(huì)立即被處理,不建議當(dāng)線程立即被創(chuàng)建后立即進(jìn)行cancel取消(線程創(chuàng)建,并不會(huì)立即被調(diào)度);也不建議在線程退出前執(zhí)行線程cancel取消(線程可能在取消之前就已經(jīng)退出了);建議在線程執(zhí)行中進(jìn)行cancel取消線程

void pthread_testcancel(void); //本函數(shù)為設(shè)置取消點(diǎn)

當(dāng)不關(guān)心線程的返回信息時(shí)可以直接使用線程分離函數(shù)進(jìn)行回收

反之,需要獲取線程的返回值時(shí),可以使用線程等待

線程等待

int pthread_join(pthread_t thread, void **value_ptr);

第一個(gè)參數(shù)是線程標(biāo)識(shí),第二是傳出型參數(shù)用來(lái)獲取線程的返回值

注意:

  • 調(diào)用該函數(shù)的線程將掛起等待,直到id為thread的線程終止
  • 這里獲取的線程退出信息并沒(méi)有終止信號(hào)信息,而終止信號(hào)信息是對(duì)于整個(gè)進(jìn)程來(lái)說(shuō)的,如果線程收到信號(hào)崩潰也會(huì)導(dǎo)致整個(gè)進(jìn)程也崩潰
  • thread線程以不同的方法終止,通過(guò)pthread_join得到的終止?fàn)顟B(tài)是不同的

終止獲取的狀態(tài)情況:

  • 如果thread線程通過(guò)return返回,value_ ptr所指向的單元里存放的是thread線程函數(shù)的返回值
  • 如果thread線程被別的線程調(diào)用pthread_ cancel異常終掉,value_ ptr所指向的單元里存放的是常數(shù)PTHREAD_ CANCELED
  • 如果thread線程是自己調(diào)用pthread_exit終止的,value_ptr所指向的單元存放的是傳給pthread_exit的參數(shù)
  • 如果對(duì)thread線程的終止?fàn)顟B(tài)不感興趣,可以傳NULL給value_ ptr參數(shù)

線程分離

int pthread_detach(pthread_t thread);

默認(rèn)情況下,新創(chuàng)建的線程是joinable的,線程退出后,需要對(duì)其進(jìn)行pthread_join操作,否則無(wú)法釋放資源,從而造成系統(tǒng)泄漏

如果不關(guān)心線程的返回值,join是一種負(fù)擔(dān),這個(gè)時(shí)候,我們可以告訴系統(tǒng),當(dāng)線程退出時(shí),自動(dòng)釋放線程資源

注:

可以是線程組內(nèi)其他線程對(duì)目標(biāo)線程進(jìn)行分離,也可以是線程自己分離:

pthread_detach(pthread_self());

joinable和分離是沖突的,一個(gè)線程不能既是joinable又是分離的

線程的分離也是具有一定延時(shí)性,分離之后如果再進(jìn)行等待那么得到返回的結(jié)果是未定義的

線程分離后只是回收的時(shí)候自動(dòng)進(jìn)行回收,如果主線程先退出,那么整個(gè)進(jìn)程也會(huì)退出;如果分離的線程執(zhí)行崩潰,同樣的整個(gè)進(jìn)行也會(huì)崩潰

到此這篇關(guān)于C語(yǔ)言由淺入深講解線程的定義的文章就介紹到這了,更多相關(guān)C語(yǔ)言線程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++連續(xù)輸入未知個(gè)數(shù)的數(shù)字操作

    c++連續(xù)輸入未知個(gè)數(shù)的數(shù)字操作

    這篇文章主要介紹了c++連續(xù)輸入未知個(gè)數(shù)的數(shù)字操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort

    C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort

    這篇文章主要介紹了C++回調(diào)函數(shù)實(shí)現(xiàn)計(jì)算器和qsort,回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)
    2022-08-08
  • C++實(shí)現(xiàn)下載的代碼

    C++實(shí)現(xiàn)下載的代碼

    這篇文章主要介紹了C++實(shí)現(xiàn)下載的代碼,以下載百度圖片為例較為完整的講述了C++下載的具體實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • Linux搭建C++開(kāi)發(fā)調(diào)試環(huán)境的方法步驟

    Linux搭建C++開(kāi)發(fā)調(diào)試環(huán)境的方法步驟

    這篇文章主要介紹了Linux搭建C++開(kāi)發(fā)調(diào)試環(huán)境的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C語(yǔ)言各種符號(hào)的使用介紹上篇

    C語(yǔ)言各種符號(hào)的使用介紹上篇

    C 語(yǔ)言的基本符號(hào)就有 20 多個(gè),每個(gè)符號(hào)可能同時(shí)具有多重含義,而且這些符號(hào)之間相互組合又使得 C 語(yǔ)言中的符號(hào)變得更加復(fù)雜起來(lái)
    2022-08-08
  • C++實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的事件(Event)的示例代碼

    C++實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的事件(Event)的示例代碼

    之前在?windows系統(tǒng)中開(kāi)發(fā)應(yīng)用時(shí),?遇到需要進(jìn)行線程同步的時(shí)候幾乎都是使用的事件內(nèi)核對(duì)象?Event。本文為大家整理了C++實(shí)現(xiàn)一個(gè)簡(jiǎn)易版的事件(Event)的相關(guān)資料,需要的可以參考一下
    2022-11-11
  • VS2022實(shí)現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程

    VS2022實(shí)現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程

    本文主要介紹了VS2022實(shí)現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 探討數(shù)組與字符串輸入的問(wèn)題(C++版)

    探討數(shù)組與字符串輸入的問(wèn)題(C++版)

    本文對(duì)C++數(shù)組與字符串輸入的問(wèn)題進(jìn)行了探討,需要的朋友可以參考下
    2015-07-07
  • C語(yǔ)言超詳細(xì)講解遞歸算法漢諾塔

    C語(yǔ)言超詳細(xì)講解遞歸算法漢諾塔

    漢諾塔問(wèn)題是一個(gè)經(jīng)典的問(wèn)題。漢諾塔(Hanoi Tower),又稱河內(nèi)塔,源于印度一個(gè)古老傳說(shuō)。本文將用Java求解這一問(wèn)題,感興趣的可以學(xué)習(xí)一下
    2022-05-05
  • OJ中G++和C++的區(qū)別

    OJ中G++和C++的區(qū)別

    今天小編就為大家分享一篇關(guān)于OJ中G++和C++的區(qū)別,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10

最新評(píng)論

开平市| 抚顺县| 鄱阳县| 响水县| 尉氏县| 盱眙县| 龙陵县| 灵寿县| 南和县| 永泰县| 临沂市| 利川市| 南漳县| 罗源县| 盈江县| 泰来县| 乐亭县| 怀安县| 和田市| 乐至县| 丹巴县| 章丘市| 梨树县| 福泉市| 田阳县| 凯里市| 鄱阳县| 平凉市| 扎赉特旗| 酒泉市| 余干县| 故城县| 石泉县| 永川市| 固原市| 资溪县| 大邑县| 濮阳县| 临沧市| 丹东市| 四川省|