·線程創(chuàng)建
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了永年免費(fèi)建站歡迎大家使用!
函數(shù)原型:int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rtn)(void),void *restrict arg);
返回值:若是成功建立線程返回0,否則返回錯(cuò)誤的編號(hào)。
形式參數(shù):pthread_t *restrict tidp要?jiǎng)?chuàng)建的線程的線程id指針;
const pthread_attr_t *restrict attr創(chuàng)建線程時(shí)的線程屬性;
void* (start_rtn)(void)返回值是void類型的指針函數(shù);
void *restrict arg start_rtn的形參。 =====這個(gè)地方就可以傳參數(shù),
注意,這個(gè)地方是個(gè)指針,要想傳多個(gè)參數(shù),可以定義一個(gè)結(jié)構(gòu)體,把要傳的參數(shù)包起來(lái),傳結(jié)構(gòu)體的地址就ok
C語(yǔ)言每一次函數(shù)調(diào)用,編譯器都會(huì)為這個(gè)函數(shù)調(diào)用分配一段空間,這段空間用來(lái)存放該函數(shù)中的所有局部變量和調(diào)用其它函數(shù)時(shí)需要傳遞的參數(shù)的副本。每一次調(diào)用這個(gè)函數(shù),這段空間都會(huì)重新分配,函數(shù)返回后這段空間就被釋放了,所以重復(fù)調(diào)用多少次都不會(huì)影響的。所有的這些函數(shù)調(diào)用時(shí)候分配的內(nèi)存都是在線程的棧上的。
順便說(shuō)一下,我覺(jué)得樓上的回答是不對(duì)的: 每個(gè)線程都只會(huì)訪問(wèn)自己調(diào)用的函數(shù)中的局部變量的,訪問(wèn)局部變量是不會(huì)存在多線程問(wèn)題的。會(huì)存在多線程問(wèn)題的肯定不是局部變量,有可能是局部變量指向的其它可共享的對(duì)象(例如:堆對(duì)象......),或者在函數(shù)中訪問(wèn)了全局對(duì)象,類的成員變量等,這些并不是局部變量。
一個(gè)main函數(shù)對(duì)應(yīng)一個(gè)線程,對(duì)于操作系統(tǒng)而言,是可以多線程的,就好像你同時(shí)打開(kāi)兩個(gè)應(yīng)用程序一樣,而兩個(gè)線程之間要實(shí)現(xiàn)數(shù)據(jù)交流則要通過(guò)共享內(nèi)存或者管道什么的。所以簡(jiǎn)單的理解是一個(gè)程序只能有一個(gè)線程或main函數(shù),一個(gè)main函數(shù)里可以調(diào)用其他進(jìn)程或者函數(shù),而對(duì)于操作系統(tǒng)而言,沒(méi)有mian函數(shù)的概念,但是可以給每個(gè)線程分配cpu資源,各個(gè)線程同時(shí)運(yùn)行,但不能相互調(diào)用,線程是相互獨(dú)立的。只能通過(guò)共享機(jī)制實(shí)現(xiàn)互相通信。