Linux c的多线程编程范例
Linux c的多线程编程实例通过创建两个线程来实现对一个数的递加。或许这个实例没有实际运用的价值,但是稍微
Linux c的多线程编程实例
通过创建两个线程来实现对一个数的递加。
或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉。
#include?<pthread.h> ??#include?<stdio.h> ?? #include?<sys/time.h> ?? #include?<string.h> ?? #include?<unistd.h> ?? #define?MAX?10 ?? pthread_t?thread[2]; ?? pthread_mutex_t?mut; ??int?number=0,?i; ?? void?*thread1(void?*) ?? { ??????????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?:the?main?function?is?waiting?for?me?\n"); ?? ????????pthread_exit(NULL); ??} ??void?*thread2(void?*) ?? { ??????????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?:the?main?function?is?waiting?for?me??\n"); ?? ????????pthread_exit(NULL); ??} ??void?thread_create(void) ?? { ??????????int?temp; ?? ????????memset(&thread,?0,?sizeof(thread));??????????//comment1 ?? ????????/*Create?thread*/?? ????????if((temp?=?pthread_create(&thread[0],?NULL,?thread1,?NULL))?!=?0)???????//comment2 ?? ????????????????printf("Thread?1?fail?to?create!\n"); ?? ????????else?? ????????????????printf("Thread?1?created!\n"); ?? ????????if((temp?=?pthread_create(&thread[1],?NULL,?thread2,?NULL))?!=?0)??//comment3 ?? ????????????????printf("Thread?2?fail?to?create!"); ?? ????????else?? ????????????????printf("Thread?2?created!\n"); ?? } ??void?thread_wait(void) ?? { ??????????/*Wait?thread?end*/?? ????????if(thread[0]?!=0)?{???????????????????//comment4 ?? ????????????????pthread_join(thread[0],NULL); ?? ????????????????printf("Thread?1?completed\n"); ?? ????????} ??????????if(thread[1]?!=0)?{????????????????//comment5 ?? ????????????????pthread_join(thread[1],NULL); ?? ????????????????printf("Thread?2?completed.\n"); ?? ????????} ??} ??int?main() ?? { ??????????/*init?mutex*/?? ????????pthread_mutex_init(&mut,NULL); ??????????printf("Main?function,creating?thread...\n"); ?? ????????thread_create(); ??????????printf("Main?function,waiting?for?thread?end....\n"); ?? ????????thread_wait(); ??????????return?0; ?? }
?
?
我是主函数哦,我正在创建线程,呵呵
线程1被创建
线程2被创建
我是主函数哦,我正在等待线程完成任务阿,呵呵
thread1 : I'm thread 1
thread1 : number = 0
thread2 : I'm thread 2
thread2 : number = 1
thread1 : number = 2
thread2 : number = 3
thread1 : number = 4
thread2 : number = 5
thread1 : number = 6
thread1 : number = 7
thread2 : number = 8
thread1 : number = 9
thread2 : number = 10
thread1 :主函数在等我完成任务吗?
线程1已经结束
thread2 :主函数在等我完成任务吗?
线程2已经结束