午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

C語(yǔ)言多線程編程(一)

 昵稱13541196 2013-08-17
    先來(lái)看一個(gè)基本的例子:
#include <pthread.h>
#include <stdio.h>

void* tprocess1(void* args){
         while(1){
                 printf( "tprocess1");
         }
         return NULL;
}

void* tprocess2(void* args){
         while(1){
                 printf("tprocess2");
         }
         return NULL;
}

int main(){
         pthread_t t1;
         pthread_t t2;
         pthread_create(&t1,NULL,tprocess1,NULL);
         pthread_create(&t2,NULL,tprocess2,NULL);
         pthread_join(t1,NULL);
         return 0;
}

在上面的例子中,我們首先加入了pthread.h文件包含,這是所以pthread多線程程序所必須的,接著是iostream我們進(jìn)行輸入輸出時(shí)要用到,接著就是兩個(gè)函數(shù)的定義,這和普通的函數(shù)沒(méi)有什么區(qū)別,之所以寫(xiě)成的
 程序代碼
void* tprocess1(void* args)
這樣的形式,完全是為了迎合pthread_create函數(shù)的參數(shù)類(lèi)型,你也可以不這樣定義,只要在調(diào)用pthread_create創(chuàng)建線程的時(shí)候強(qiáng)制轉(zhuǎn)換一下指針類(lèi)型就可以了。

這兩個(gè)函數(shù)將被用做線程的執(zhí)行體,也就是說(shuō)在兩個(gè)線程里同時(shí)運(yùn)行這兩個(gè)函數(shù)。

現(xiàn)在我們來(lái)看main函數(shù),和pthread有關(guān)的調(diào)用都在這里了。
pthread_t是線程結(jié)構(gòu),用來(lái)保存線程相關(guān)數(shù)據(jù),你也可以理解為是線程類(lèi)型,聲明一個(gè)線程對(duì)象(變量)。
 程序代碼
         pthread_t t1;
         pthread_t t2;
這里我們聲明了兩個(gè)線程變量t1,t2

 程序代碼
         pthread_create(&t1,NULL,tprocess1,NULL);
         pthread_create(&t2,NULL,tprocess2,NULL);
這兩句非常重要,pthread_create用來(lái)創(chuàng)建線程并啟動(dòng),他的原型是
 程序代碼
int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg);
我們可以知道第一個(gè)參數(shù)是線程指針,第二參數(shù)是線程屬性指針,線程屬性pthread_attr_t用來(lái)指定線程優(yōu)先級(jí)等屬性,一般的情況下,我們沒(méi)有必要修改,使用默認(rèn)屬性來(lái)構(gòu)造線程,所以這里一般取NULL,我們也是這樣做的,第三個(gè)參數(shù)是一個(gè)函數(shù)指針,就是線程要執(zhí)行的代碼,這里我們分別要執(zhí)行tprocess1 tprocess2就寫(xiě)成了上面的樣子,這里這個(gè)函數(shù)指針的類(lèi)型定義是返回一個(gè)空類(lèi)型指針,接收一個(gè)空類(lèi)型指針參數(shù)的函數(shù)指針,如果你的函數(shù)不是這個(gè)定義,那就可以直接轉(zhuǎn)化一下就可以了。

寫(xiě)完這兩行代碼,兩個(gè)線程就已經(jīng)執(zhí)行起來(lái)了,但是如果你省略了
 程序代碼
         pthread_join(t1,NULL);
然后嘗試編譯運(yùn)行程序的時(shí)候你會(huì)發(fā)現(xiàn)程序似乎什么也沒(méi)干就退出了,是的,那是因?yàn)槌绦虻闹骶€程退出的時(shí)候操作系統(tǒng)會(huì)關(guān)閉應(yīng)用程序使用的所有資源,包括線程……所以在main函數(shù)結(jié)束前我們得想辦法讓程序停下來(lái),pthread_join方法的功能就是等待線程結(jié)束,要等的線程就是第一個(gè)參數(shù),程序會(huì)在這個(gè)地方停下來(lái),直到線程結(jié)束,第二個(gè)參數(shù)用來(lái)接受線程函數(shù)的返回值,是void**類(lèi)型的指針,如果沒(méi)有返回值,就直接設(shè)為NULL吧。

程序?qū)懞昧?,我們?cè)趺淳幾g運(yùn)行它呢?
如果你使用的是Linux:
在終端里輸入
g++ thread.cpp -othread -lpthread
./thread
就可以完成程序的編譯及運(yùn)行



摘自:http://www.cnblogs.com/lovko/archive/2009/01/15/1376032.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多