先看执行的结果:
1 主函数正在创建线程,... 2 线程1被创建 3 Thread1 : I'm thread 1th 4 线程2被创建 5 Thread2 : I'm thread 2nd 6 thread2 : number = 0 7 线程3被创建 8 主函数正在等待线程结束... 9 thread1 : number = 0 10 Thread3 : I'm thread 3nd 11 thread3 : number = 2 12 thread3 : number = 3 13 thread2 : number = 4 14 thread1 : number = 5 15 thread3 : number = 6 16 thread2 : number = 7 17 thread3 : number = 8 18 thread1 : number = 9 19 thread3 : number = 10 20 thread2 : number = 11 21 thread3 : number = 12 22 thread2 : number = 13 23 thread1 : number = 14 24 thread3 : number = 15 25 thread3 : number = 16 26 thread2 : number = 17 27 thread1 : number = 18 28 thread3 : number = 19 29 thread2 : number = 20 30 thread3 : number = 21 31 thread1 : number = 22 32 thread3 : number = 23 33 thread2 : number = 24 34 thread3 : number = 25 35 thread2 : number = 26 36 thread1 : number = 27 37 thread3 : number = 28 38 thread3 : number = 29 39 thread2 : number = 30 40 thread1 : number = 31 41 Thread3 :main函数在等我完成任务吗? 42 Thread2 :main函数在等我完成任务吗? 43 Thread1 :main函数在等我完成任务吗? 44 线程1已经结束 45 线程2已经结束 46 线程3已经结束
代码如下:参考网上的,稍微修改了下:否则,不能编译和运行:
1 //fileName: threadSample.c 2 #include <pthread.h> 3 #include <stdio.h> 4 #include <sys/time.h> 5 #include <string.h> 6 #include <unistd.h> //添加的头文件 7 #define MAX 30 8 9 pthread_t thread[3]; //3个线程 10 pthread_mutex_t mut; 11 int number=0; 12 int i; 13 14 void *thread1(){ 15 printf ("Thread1 : I'm thread 1th\n"); 16 for (i = 0; i < MAX; i++) 17 { 18 printf("thread1 : number = %d\n",number); 19 pthread_mutex_lock(&mut); 20 number++; 21 pthread_mutex_unlock(&mut); 22 sleep(4); 23 } 24 25 printf("Thread1 :main函数在等我完成任务吗?\n"); 26 pthread_exit(NULL); 27 } 28 29 void *thread2(){ 30 printf("Thread2 : I'm thread 2nd\n"); 31 32 for (i = 0; i < MAX; i++) 33 { 34 printf("thread2 : number = %d\n",number); 35 pthread_mutex_lock(&mut); 36 number++; 37 pthread_mutex_unlock(&mut); 38 sleep(3); 39 } 40 41 printf("Thread2 :main函数在等我完成任务吗?\n"); 42 pthread_exit(NULL); 43 } 44 45 void *thread3(){ 46 printf("Thread3 : I'm thread 3nd\n"); 47 48 for (i = 0; i < MAX; i++) 49 { 50 printf("thread3 : number = %d\n",number); 51 pthread_mutex_lock(&mut); 52 number++; 53 pthread_mutex_unlock(&mut); 54 sleep(2); 55 } 56 57 printf("Thread3 :main函数在等我完成任务吗?\n"); 58 pthread_exit(NULL); 59 } 60 61 void thread_create(void){ int temp; 62 memset(&thread, 0, sizeof(thread)); 63 /*创建线程*/ 64 if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) 65 printf("线程1创建失败!\n"); 66 else 67 printf("线程1被创建\n"); 68 69 if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) 70 printf("线程2创建失败"); 71 else 72 printf("线程2被创建\n"); 73 74 if((temp = pthread_create(&thread[2], NULL, thread3, NULL)) != 0) 75 printf("线程3创建失败"); 76 else 77 printf("线程3被创建\n"); 78 } 79 80 void thread_wait(void){ 81 /*等待线程结束*/ 82 if(thread[0] !=0){ 83 pthread_join(thread[0],NULL); 84 printf("线程1已经结束\n"); 85 } 86 if(thread[1] !=0){ 87 pthread_join(thread[1],NULL); 88 printf("线程2已经结束\n"); 89 } 90 if(thread[2] !=0){ 91 pthread_join(thread[2],NULL); 92 printf("线程3已经结束\n"); 93 } 94 } 95 96 int main() 97 { 98 /*用默认属性初始化互斥锁*/ 99 pthread_mutex_init(&mut,NULL); 100 101 printf("主函数正在创建线程,...\n"); 102 thread_create(); 103 printf("主函数正在等待线程结束...\n"); 104 thread_wait(); 105 106 return 0; 107 }
再次执行结果为:
1 主函数正在创建线程,... 2 线程1被创建 3 Thread1 : I'm thread 1th 4 thread1 : number = 0 5 Thread2 : I'm thread 2nd 6 thread2 : number = 1 7 线程2被创建 8 线程3被创建 9 主函数正在等待线程结束... 10 Thread3 : I'm thread 3nd 11 thread3 : number = 2 12 thread3 : number = 3 13 thread2 : number = 4 14 thread1 : number = 5 15 thread3 : number = 6 16 thread2 : number = 7 17 thread3 : number = 8 18 thread1 : number = 9 19 thread3 : number = 10 20 thread2 : number = 11 21 thread3 : number = 12 22 thread1 : number = 13 23 thread2 : number = 14 24 thread3 : number = 15 25 thread3 : number = 16 26 thread2 : number = 17 27 thread1 : number = 18 28 thread3 : number = 19 29 thread2 : number = 20 30 thread3 : number = 21 31 thread1 : number = 22 32 thread3 : number = 23 33 thread2 : number = 24 34 thread3 : number = 25 35 thread1 : number = 26 36 thread2 : number = 27 37 thread3 : number = 28 38 thread3 : number = 29 39 thread2 : number = 30 40 thread1 : number = 31 41 Thread3 :main函数在等我完成任务吗? 42 Thread2 :main函数在等我完成任务吗? 43 Thread1 :main函数在等我完成任务吗? 44 线程1已经结束 45 线程2已经结束 46 线程3已经结束
编译方法:gcc threadSample.c -o threadSample -lpthread
代码非常简单,请自行理解吧
来源:https://www.cnblogs.com/guochaoxxl/p/12584529.html