IO 作业6

1、两辆火车互斥

#include <allhead.h>
sem_t a;

void* run(void* arg)
{
	while(1)
	{
		sem_wait(&a);
		printf("火车B驶入隧道\n");
		sleep(1);
		printf("火车B驶出隧道\n");
		sleep(1);
		sem_post(&a);

	}
}
int main(int argc, const char *argv[])
{
	sem_init(&a,0,1);

	pthread_t id;
	if(pthread_create(&id,NULL,run,NULL)!=0)
	{
		perror("create");
		return 1;
	}
	pthread_detach(id);

	while(1)
	{
		sem_wait(&a);
		printf("火车A驶入隧道\n");
		sleep(1);
		printf("火车A驶出隧道\n");
		sleep(1);
		sem_post(&a);
	}
	sem_destroy(&a);
	return 0;
}

2、三辆火车同步

#include <allhead.h>
sem_t a;
sem_t b;
sem_t c;

void* run1(void* arg)
{
	while(1)
	{
		sem_wait(&a);
		printf("火车B驶入隧道\n");
		sleep(1);
		printf("火车B驶出隧道\n");
		sleep(1);
		sem_post(&c);

	}
}
void* run2(void* arg)
{
	while(1)
	{
		sem_wait(&c);
		printf("火车C驶入隧道\n");
		sleep(1);
		printf("火车C驶出隧道\n");
		sleep(1);
		sem_post(&b);

	}
}
int main(int argc, const char *argv[])
{
	sem_init(&a,0,1);
	sem_init(&b,0,1);
	sem_init(&c,0,0);

	sem_wait(&a);

	pthread_t id1;
	pthread_t id2;
	if(pthread_create(&id1,NULL,run1,NULL)!=0)
	{
		perror("create");
		return 1;
	}	
	if(pthread_create(&id2,NULL,run2,NULL)!=0)
	{
		perror("create");
		return 1;
	}
	pthread_detach(id1);
	pthread_detach(id2);

	while(1)
	{
		sem_wait(&b);
		printf("火车A驶入隧道\n");
		sleep(1);
		printf("火车A驶出隧道\n");
		sleep(1);
		sem_post(&a);

	}
	sem_destroy(&a);
	sem_destroy(&b);
	sem_destroy(&c);
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值