通过创建两个线程来实现对一个数的递加。
或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉。
#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; }
下面是运行结果: