线程___mutex互斥锁线程控制

来源:互联网 发布:kmeans聚类算法python 编辑:程序博客网 时间:2024/06/10 12:22
#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 = 0;time_t end_time;void pthread1(void *arg);void pthread2(void *arg);int main(int argc, char *argv[]){pthread_t id1,id2;pthread_t mon_th_id;int ret;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");pthread_join(id1,NULL);pthread_join(id2,NULL);exit(0);}void pthread1(void *arg){int i;while(time(NULL) < end_time){if(pthread_mutex_lock(&mutex)!=0)  //互斥锁上锁{perror("pthread_mutex_lock");}elseprintf("pthread1:pthread1 lock the variable\n");for(i=0;i<2;i++){sleep(1);lock_var++;}if(pthread_mutex_unlock(&mutex)!=0)//互斥锁解锁{perror("pthread_mutex_unlock");}elseprintf("pthread1:pthread1 unlock the variable\n");sleep(1);}}void pthread2(void *arg){int nolock=0;int ret;while(time(NULL) < end_time){ret=pthread_mutex_trylock(&mutex);  //互斥锁判断上锁if(ret==EBUSY)printf("pthread2:the variable is locked by pthread1\n");else{if(ret!=0){perror("pthread_mutex_trylock");exit(1);}elseprintf("pthread2:pthread2 got lock.The variable is %d\n",lock_var);if(pthread_mutex_unlock(&mutex)!=0){perror("pthread_mutex_unlock");} elseprintf("pthread2:pthread2 unlock the variable\n");}sleep(3);}}

0 0
原创粉丝点击