-- 作者:wangxinxin
-- 發(fā)布時(shí)間:2010-11-15 9:07:50
-- 嵌入式基礎(chǔ)__linux多線程編程
簡(jiǎn)單的多線程編程 這里引用的是在百度上找的資料,感覺(jué)挺好的,挺適合入門(mén)的. 轉(zhuǎn): 學(xué)東西,往往實(shí)例才是最讓人感興趣的,老是學(xué)基礎(chǔ)理論,不動(dòng)手,感覺(jué)沒(méi)有成就感,呵呵。
下面先來(lái)一個(gè)實(shí)例。我們通過(guò)創(chuàng)建兩個(gè)線程來(lái)實(shí)現(xiàn)對(duì)一個(gè)數(shù)的遞加。 或許這個(gè)實(shí)例沒(méi)有實(shí)際運(yùn)用的價(jià)值,但是稍微改動(dòng)一下,我們就可以用到其他地方去拉。
下面是我們的代碼:
/*thread_example.c : c multiple thread programming in linux *author : falcon *E-mail : tunzhj03@st.lzu.edu.cn */
#include <pthread.h> #include <stdio.h> #include <sys/time.h> #include <string.h> #define MAX 10
pthread_t thread[2]; pthread_mutex_t mut; int number=0, i;
void *thread1() { printf ("thread1 : I\'m thread 1\\n");
for (i = 0; i < MAX; i++) { printf("thread1 : number = %d\\n",number); pthread_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(2); }
printf("thread1 :主函數(shù)在等我完成任務(wù)嗎?\\n"); pthread_exit(NULL); }
void *thread2() { printf("thread2 : I\'m thread 2\\n");
for (i = 0; i < MAX; i++) { printf("thread2 : number = %d\\n",number); pthread_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(3); }
printf("thread2 :主函數(shù)在等我完成任務(wù)嗎?\\n"); pthread_exit(NULL); }
void thread_create(void) { int temp; memset(&thread, 0, sizeof(thread)); //comment1 /*創(chuàng)建線程*/ if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) //comment2 printf("線程1創(chuàng)建失敗!\\n"); else printf("線程1被創(chuàng)建\\n");
if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3 printf("線程2創(chuàng)建失敗"); else printf("線程2被創(chuàng)建\\n"); }
void thread_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[1],NULL); printf("線程2已經(jīng)結(jié)束\\n"); } }
int main() { /*用默認(rèn)屬性初始化互斥鎖*/ pthread_mutex_init(&mut,NULL);
printf("我是主函數(shù)哦,我正在創(chuàng)建線程,呵呵\\n"); thread_create(); printf("我是主函數(shù)哦,我正在等待線程完成任務(wù)阿,呵呵\\n"); thread_wait();
return 0;
|