亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > linux線程庫(kù)詳解,還附帶典型實(shí)例哦

linux線程庫(kù)詳解,還附帶典型實(shí)例哦 時(shí)間:2018-07-18      來源:未知

在linux環(huán)境下的并發(fā)程序設(shè)計(jì)有兩個(gè)選擇,分別是多進(jìn)程并發(fā)與多線程并發(fā)。

關(guān)于多進(jìn)程與多線程編程之前已經(jīng)有很多博文介紹過了,但關(guān)于線程庫(kù)的介紹卻很少。

在linux環(huán)境下當(dāng)采用多線程編程時(shí),需要在編譯的時(shí)候加上-lpthread(或-pthread) 以顯示鏈接該庫(kù)。之所以這樣是因?yàn)閜thread并非Linux系統(tǒng)的默認(rèn)庫(kù),而是POSIX線程庫(kù)。而說起線程庫(kù)并不是一句話能夠說得清楚,因?yàn)檫@涉及到了Linux內(nèi)核和線程庫(kù)的發(fā)展史。

起初在線程概念出現(xiàn)之后,并沒有在類unix操作系統(tǒng)中得到廣泛支持。比如在linux2.4以及以前版本,因?yàn)檫沒有線程的概念,linux內(nèi)核不知道什么是線程,程序員也就沒有辦法在操作系統(tǒng)上創(chuàng)建線程。而后來隨著技術(shù)發(fā)展,線程帶來的好處被大家所認(rèn)識(shí),因?yàn)閯?chuàng)建進(jìn)程開銷的資源更多,且進(jìn)程間的切換相比線程更慢。于是我們希望Linux能實(shí)現(xiàn)多線程編程,然而要修改一個(gè)操作系統(tǒng)并不是件容易的事情,于是采用的辦法是寫函數(shù)來實(shí)現(xiàn),而不是去修改操作系統(tǒng)的內(nèi)核。而這些函數(shù)也就是最初的線程庫(kù),由于在linux內(nèi)核中沒有線程的概念,因此這種線程是用進(jìn)程來模擬的,實(shí)際上在不同的線程內(nèi)調(diào)用getpid()函數(shù),就會(huì)發(fā)現(xiàn)得到的值不同,因?yàn)樗鼈冊(cè)趦?nèi)核的進(jìn)程鏈表中有不同的task_struct結(jié)構(gòu)體來表示,有各自不同的進(jìn)程標(biāo)識(shí)符PID。因此這種線程也被稱為用戶級(jí)線程。雖然當(dāng)時(shí)的線程庫(kù)已經(jīng)和POSIX的標(biāo)準(zhǔn)非常接近了,但是在linux的線程實(shí)現(xiàn)版本和POSIX標(biāo)準(zhǔn)之間還是存在著細(xì)微的差別,最明顯的是關(guān)于信號(hào)處理部分,這些差別中的大部分都受底層linux內(nèi)核的限制,而不是函數(shù)所能改變的。

許多項(xiàng)目都在研究如何才能改善linux對(duì)線程的支持,當(dāng)然這種改善不僅僅是清除POSIX標(biāo)準(zhǔn)和linux具體實(shí)現(xiàn)之間的細(xì)微差別,還要增強(qiáng)linux線程的性能和刪除一些不需要的限制,這其中大部分工作集中在了如何將用戶級(jí)的線程映射到內(nèi)核級(jí)的線程。

其中IBM公司的NGPT(Next Generation POSIX Threads),和Redhat公司的NPTL(Native POSIX Thread Library)通過修改linux內(nèi)核來支持新的線程庫(kù),兩者都極大地提升了性能。在2002年,NGPT項(xiàng)目組宣布,由于不希望分化團(tuán)隊(duì),所以停止為NGPT添新功能,而只是繼續(xù)進(jìn)行l(wèi)inux上的線程支持工作,從而有效地將他們的重?fù)?dān)放到了NPTL的身上。也因此NPTL成為了linux線程的新標(biāo)準(zhǔn)。NPTL有了很多優(yōu)點(diǎn):沒有使用管理線程。因?yàn)楣芾砭程的一些需求,例如向作為進(jìn)程一部分的所有線程發(fā)送終止信號(hào),是并不需要的,因?yàn)閮?nèi)核本身就可以實(shí)現(xiàn)這些功能。內(nèi)核還會(huì)處理每個(gè)線程堆棧所使用的內(nèi)存的回收工作。它甚至還通過在清除父線程之前進(jìn)行等待,從而實(shí)現(xiàn)對(duì)所有線程結(jié)束的管理,這樣可以避免僵尸進(jìn)程的問題。

最后關(guān)于編譯參數(shù)-lpthread與-pthread其實(shí)是有區(qū)別的。主要在可移植性和安全性上。

在Linux中,pthread是作為一個(gè)單獨(dú)的庫(kù)存在的(libpthread.so),但是在其他Unix變種中卻不一定,比如在FreeBSD中是沒有單獨(dú)的pthread庫(kù)的,因此在FreeBSD中不能使用-lpthread來鏈接pthread,而使用-pthread則不會(huì)存在這個(gè)問題,因?yàn)镕reeBSD的編譯器能正確將-pthread展開為該系統(tǒng)下的依賴參數(shù)。同樣道理,其他不同的變種也會(huì)有這樣那樣的區(qū)別,如果使用-lpthread,則可能在移植到其他Unix變種中時(shí)會(huì)出現(xiàn)問題,為了保持較高的可移植性,我們最好還是使用-pthread。在多數(shù)系統(tǒng)中,-pthread會(huì)被展開為-D_REENTRANT -lpthread,即是除了鏈接pthread庫(kù)外,還先定義了宏_REENTRANT。定義這個(gè)宏的目的,是為了打開系統(tǒng)頭文件中的各種多線程支持分支。比如,我們常常使用的錯(cuò)誤碼標(biāo)志errno,如果沒有定義_REENTRANT,則實(shí)現(xiàn)為一個(gè)全局變量;若是定義了_REENTRANT,則會(huì)實(shí)現(xiàn)為每線程獨(dú)有,從而避免線程競(jìng)爭(zhēng)錯(cuò)誤。綜上所述,在編譯和鏈接時(shí)都使用-pthread 選項(xiàng)而不是傳統(tǒng)的-lpthread能夠保持向后兼容性和安全性。

Linux環(huán)境創(chuàng)建線程的實(shí)例。

#include

#include

#include

#include

#include

void *child_pthread(void *argc)

{

while(1)

{

printf("子線程process pid:%d,thread's id=%u\n",getpid(),(unsigned int)pthread_self());

sleep(2);

}

}

int main(void)

{

int ret;

pthread_t pid;

ret = pthread_create(&pid,NULL,child_pthread,NULL);

if(ret){

perror("pthread_create");

exit(0);

}

while(1)

{

printf("主線程process pid:%d,thread's id:%u\n",getpid(),(unsigned int)pthread_self());

sleep(2);

}

return 0;

}

在linux環(huán)境下創(chuàng)建線程采用pthread_create()

頭文件

#include

函數(shù)聲明

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,

void *(*start_routine) (void *), void *arg);

返回值

若成功則返回0,否則返回出錯(cuò)編號(hào)

編譯運(yùn)行結(jié)果如下圖所示,其中編譯選項(xiàng)-pthread指定鏈接線程庫(kù)。運(yùn)行結(jié)果主線程與子線程的進(jìn)程id一致,線程id則不同。

線程庫(kù)

上一篇:linux移植方法步驟?大牛區(qū)區(qū)幾步教會(huì)你

下一篇:activity工作流,這里讓你快速了解

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 看全色黄大色大片免费久久 | 成人播放 | 99国产精品热久久久久久夜夜嗨 | xxxx日本69| 亚洲天天综合色制服丝袜在线 | jizz另类| 午夜香蕉成视频人网站高清版 | 日韩色视 | 蜜桃成人 | 久久操网站 | 免费jzzjzz在线播放视频 | 国产卡一卡二卡3卡4卡无卡视频 | 久操视频在线播放 | 久热综合 | 亚洲精品中文字幕久久久久久 | 国产高清视频 | 黄色污污视频网站 | 成人中文在线 | 成年黄网站色大免费全看 | 久热精品视频在线播放 | 亚洲 欧美 中文 日韩欧美 | 亚洲品质自拍视频 | 国产欧美一区二区精品仙草咪 | 毛片片| 精品视频在线观看你懂的一区 | 午夜视频精品 | 一区中文字幕 | 色综合久久伊人 | 狠狠色噜噜狠狠狠狠米奇777 | 久久伊人精品热在75 | 99久久这里只精品麻豆 | 9 9久热re在线精品视频 | 黄色网站播放 | 免费看午夜高清性色生活片 | 国产在线视频www片 国产在线视频在线 | 久久一本岛在免费线观看2020 | 欧美亚洲大片 | 国产亚洲美女精品久久久 | 国产免费网站观看电视连续剧 | 欧美中文在线视频 | 国产曰批视频免费观看完 |