Linux操作系统多线程同步Mutex介绍(2)
示例:
| #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h> #include <errno.h> pthread_mutex_t mutex = pthread_mutex_initializer; int lock_var; time_t end_time; int sum; void pthread1(void *arg); void pthread2(void *arg); void pthread3(void *arg); int main(int argc, char *argv[]) { pthread_t id1,id2,id3; pthread_t mon_th_id; int ret; sum=10; end_time = time(null)+10; pthread_mutex_init(&mutex,null); ret=pthread_create(&id1,null,(void *)pthread1, null); if(ret!=0) perror("pthread cread1"); ret=pthread_create(&id2,null,(void *)pthread2, null); if(ret!=0) perror("pthread cread2"); ret=pthread_create(&id3,null,(void *)pthread3, null); if(ret!=0) perror("pthread cread3"); pthread_join(id1,null); pthread_join(id2,null); pthread_join(id3,null); exit(0); } void pthread1(void *arg) { int i; while(time(null) < end_time) { if(pthread_mutex_lock(&mutex)!=0) //lock { perror("pthread_mutex_lock"); } else printf("pthread1:pthread1 lock the variable "); for(i=0;i<2;i++) { sleep(2); lock_var++; } if(pthread_mutex_unlock(&mutex)!=0) //unlock { perror("pthread_mutex_unlock"); } else printf("pthread1:pthread1 unlock the variable "); sleep(1); } } (文章来源 www.iocblog.net) void pthread2(void *arg) { int nolock=0; int ret; while(time(null) < end_time) { ret=pthread_mutex_trylock(&mutex);//try lock if(ret==ebusy) printf("pthread2:the variable is locked by pthread1 "); else{ if(ret!=0) { perror("pthread_mutex_trylock"); exit(1); } else printf("pthread2:pthread2 got lock.the variable is %d ",lock_var); if(pthread_mutex_unlock(&mutex)!=0)//unlock { perror("pthread_mutex_unlock"); } else printf("pthread2:pthread2 unlock the variable "); } sleep(1); } } void pthread3(void *arg) {/* int nolock=0; int ret; while(time(null) < end_time) { ret=pthread_mutex_trylock(&mutex); if(ret==ebusy) printf("pthread3:the variable is locked by pthread1 or 2 "); else { if(ret!=0) { perror("pthread_mutex_trylock"); exit(1); } else printf("pthread3:pthread3 got lock.the variable is %d ",lock_var); if(pthread_mutex_unlock(&mutex)!=0) { perror("pthread_mutex_unlock"); } else printf("pthread3:pthread2 unlock the variable "); } sleep(3); }*/ } |
Tag: Mutex ,多线程
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。