資源描述:
《linux下C語言多線程編程實例.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、linux下C語言多線程編程實例2007年11月29日 星期四10:39學(xué)東西,往往實例才是最讓人感興趣的,老是學(xué)基礎(chǔ)理論,不動手,感覺沒有成就感,呵呵.?下面先來一個實例。我們通過創(chuàng)建兩個線程來實現(xiàn)對一個數(shù)的遞加。或許這個實例沒有實際運(yùn)用的價值,但是稍微改動一下,我們就可以用到其他地方去拉。??下面是我們的代碼:/*thread_example。c:?。恪ultiplethreadprogramming inlinux *author:falcon*E—mail?。簍unzhj03@st.lzu.edu.cn?。?#include<pthread。h>#include 〈
2、stdio.h〉#include<sys/time。h〉#include〈string.h〉#defineMAX10pthread_t thread[2];pthread_mutex_tmut;int number=0, i;void*thread1(){?。餽intf ("thread1: I'mthread1\n"); for(i=?。?i <MAX;i++) { printf(”thread1:number=%d",number); ?。餿hread_mutex_lock(&mut); number++; ?。穑簦鑢ead_mutex_unlo
3、ck(&mut); sleep(2);?。 rintf("thread1:主函數(shù)在等我完成任務(wù)嗎?"); pthread_exit(NULL);}void*thread2(){ printf(”thread2:I’m thread2\n"); for (i= 0;i< MAX;i++) ?。 。穑颍閚tf(”thread2?。簄umber=%d",number); ?。穑鬶read_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(3); ?。 ri
4、ntf(”thread2:主函數(shù)在等我完成任務(wù)嗎?n"); pthread_exit(NULL);}voidthread_create(void){int temp; memset(&thread,0,sizeof(thread)); ?。?comment1?。?創(chuàng)建線程*/ ?。閒((temp= pthread_create(&thread[0],NULL,thread1, NULL)) !=0) //comment2 printf("線程1創(chuàng)建失?。。睿ⅲ?;else printf("線程1被創(chuàng)建n"); if((temp=pthread_c
5、reate(&thread[1],NULL, thread2,NULL))??!=0)//comment3 printf("線程2創(chuàng)建失敗"); else printf("線程2被創(chuàng)建n”);}voidthread_wait(void){ ?。?等待線程結(jié)束*/ if(thread[0]!=0){ //comment4 pthread_join(thread[0],NULL); printf("線程1已經(jīng)結(jié)束n");} if(thread[1]??!=0){ //comment5 pthread_join(thread[
6、1],NULL); printf("線程2已經(jīng)結(jié)束”); }}intmain(){ /*用默認(rèn)屬性初始化互斥鎖*/ pthread_mutex_init(&mut,NULL);printf("我是主函數(shù)哦,我正在創(chuàng)建線程,呵呵n"); thread_creat(yī)e();printf(”我是主函數(shù)哦,我正在等待線程完成任務(wù)阿,呵呵”); thread_wait(); return0;}?下面我們先來編譯、執(zhí)行一下??引文: ?falcon@falcon:~/program/c/code/ftp$?。鏲c-lpthread —othread_exa
7、mplethread_example.c?falcon@falcon:~/program/c/code/ftp$ 。/thread_example我是主函數(shù)哦,我正在創(chuàng)建線程,呵呵線程1被創(chuàng)建?線程2被創(chuàng)建我是主函數(shù)哦,我正在等待線程完成任務(wù)阿,呵呵thread1:I'm thread?。?thread1 : number= 0thread2:I’m?。簦瑁騟ad2?thread2:number?。??thread1:number =2?thread2:number=3thread1:number =4