java同步三线程打印abc_基于条件变量和互斥量同步的三线程顺序打印abc(10次)实现...

先看代码 //创建三个线程顺序打印abc//利用条件变量加互斥量实现//#include#include#include#include#include//线程相关的头文件int i=0;int n=0;//声明互斥量,条件变量pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;pthread_cond_t cond=PTHREAD_COND_INITIALIZER;void* printa(){

while(n<10)

{

pthread_mutex_lock(&mutex);

while(i!=1)

pthread_cond_wait(&cond,&mutex);

pthread_t tid;

tid=pthread_self();

printf("a

tid:%lu\n",tid);

i++;

pthread_mutex_unlock(&mutex);

sleep(1);

}

return (void *)0;}void* printb(){

while(n<10){

pthread_mutex_lock(&mutex);

while(i!=2)

pthread_cond_wait(&cond,&mutex);

pthread_t tid;

tid=pthread_self();

printf("b

tid:%lu\n",tid);

i++;

pthread_mutex_unlock(&mutex);

}

return (void *)0;}void* printc(){

while(n<10)

{

pthread_mutex_lock(&mutex);

while(i!=3)

pthread_cond_wait(&cond,&mutex);

pthread_t tid;

tid=pthread_self();

printf("c

tid:%lu\n",tid);

i=1;

n++;

sleep(1);

pthread_mutex_unlock(&mutex);

printf("\n");

}

return (void *)0;}int main(){

pthread_t tid;

int err;

err=pthread_create(&tid,NULL,printa,NULL);

if(err!=0)

printf("pthread_creat erro\n");

err=pthread_create(&tid,NULL,printb,NULL);

if(err!=0)

printf("pthread_creat erro\n");

err=pthread_create(&tid,NULL,printc,NULL);

if(err!=0)

printf("pthread_creat erro\n");

pthread_mutex_lock(&mutex);

i++;

pthread_mutex_unlock(&mutex);

while(1)

{

if(i==1||i==2||i==3)

pthread_cond_broadcast(&cond);

if(n==10)

break;

}

exit(0);} 条件变量决定线程是否输出,互斥量保护对条件。需要解释的是pthread_cond_wait()传入的参数是锁着的互斥量和条件,函数内部会对互斥量进行解锁,这样其他线程申请互斥量加锁的操作可以成功,3个线程都会停留在while(条件)这里。最后注意记得pthread_cond_broadcast(&cond);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值