Linux操作系统多线程同步Mutex介绍(2)

分类: 系统管理   出处:iocblog整理  更新时间:2008-10-19   添加到收藏  

    示例:
    
   

 #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);
}*/
}

上一页 [1] [2]


Tag: Mutex ,多线程



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。