实现多线程编程下互斥地访问同一个变量!
参考代码:
/************************************************************************* > File Name: thread_exap.c > Author: xiao5 > Mail: [email protected] > Created Time: Sun 12 Jun 2016 04:19:01 PM CST ************************************************************************/ #include<stdio.h> #include<pthread.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'am 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:主函数在等待我完成任务吗?\n"); pthread_exit(NULL); } void *thread2() { printf("Thread2: I'am thread2\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: 主函数在等待我完成任务吗?\n"); pthread_exit(NULL); } void thread_create(void) { int temp; memset(&thread, 0, sizeof(thread)); if((temp = pthread_create(&thread[0], NULL, thread1, NULL)) != 0) printf("线程1创建失败!\n"); else printf("线程1创建成功!\n"); if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) printf("线程2创建失败!\n"); else printf("线程2创建成功!\n"); } void thread_wait(void) { /* 等待线程结束 */ if(thread[0] != 0) { pthread_join(thread[0], NULL); printf("线程1已经结束\n"); } if(thread[1] != 0) { pthread_join(thread[1], NULL); printf("线程2已经结束\n"); } } int main() { pthread_mutex_init(&mut, NULL); printf("我是主函数哦,我正在创建线程~\n"); thread_create(); printf("我是主函数哦,我正在等待线程完成任务\n"); thread_wait(); return 0; }
编译执行后的结果如下: