多线程 同步
2016-05-24 17:32
417 查看
/*thread_mutex.c*/ #include <stdio.h> #include <stdlib.h> #include <pthread.h> #define THREAD_NUMBER 3 #define REPEAT_NUMBER 3 #define DELAY_TIME_LEVELS 10.0 pthread_mutex_t mutex; void *thrd_func(void *arg) { int thrd_num = (int )arg; int delay_time = 0,count =0; int res; /**互斥上锁*/ res = pthread_mutex_lock(&mutex); if(res){ printf("Thread %d lock failed\n",thrd_num); pthread_exit(NULL); } printf("Thread %d is starting \n",thrd_num); for(count = 0; count <REPEAT_NUMBER;count++) { delay_time = (int)(rand()*DELAY_TIME_LEVELS/(RAND_MAX))+1; sleep(delay_time); printf("\tThread %d :job %d delay = %d \n",thrd_num,count,delay_time); } pthread_mutex_unlock(&mutex); // 解开互斥锁 printf("Thread %d finished \n",thrd_num); pthread_exit(NULL); } int main(void) { pthread_t thread[THREAD_NUMBER]; int no = 0,res; void * thrd_ret; srand(time(0)); /*互斥锁初始化*/ pthread_mutex_init(&mutex,NULL); for(no =0;no < THREAD_NUMBER; no++) { /*创建多线程*/ res = pthread_create(&thread[no],NULL,thrd_func,(void*)no); if(res != 0) { printf("Create thread %d failed \n",no); exit(res); } } printf("Create tread success\n Waiting for threads to finish...\n"); for(no = 0;no <THREAD_NUMBER;no++) { /*等待线程结束*/ res = pthread_join(thread[no],&thrd_ret); if(!res) { printf("Thread %d joined \n",no); } else { printf("Thread %d join failed \n",no); } /* 互斥锁解锁*/ // pthread_mutex_unlock(&mutex); } pthread_mutex_destroy(&mutex); return 0; }
使用是实验的源程序,我发现会报错,因为线程在创建的时候已经在执行了,不一定是线程0抢到了进程锁,我试了一下发现是进程2拿到了进程锁,而下面就是一直在等带进程0结束,而进程0又在等待进程2释放进程锁,所以,实验程序跑不下去了。我把释放进程锁放到了,子程序中,实验完成。
相关文章推荐
- C#使用Mutex简单实现程序单实例运行的方法
- C#中的lock、Monitor、Mutex学习笔记
- 使用 golang 实现类似 pthread_barrier_t 语义的 barrier 对象 3ff0
- Linux C Phread 入门1---线程创建
- POSIX 线程库功能接口与知识点汇总
- [转载]Pthreads mutex VS Pthreads spinlock
- C++爱好者博客
- mutex,performance_schema
- 对mutex进行RAII封装
- mutex 线程访问控制
- Head First C 第十二章 线程 平行世界
- mutex 和 spinlock 对比
- posix线程同步和boost线程同步学习笔记
- 信号量,互斥锁实现 生产者-消费者模式
- 多线程编程之信号量
- pthread线程学习笔记一
- 多线程同步之Mutex(互斥对象)
- 多线程之互斥锁
- Android NDK pthreads详细使用
- c++使用thread类时编译出错,对‘pthread_create’未定义的引用