408操作系统作业,c++写个线程同步试试手

#include<iostream>
#include<Windows.h>
#include<process.h>
using namespace std;
int mutex1 = 1,//处理线程互斥
site = 10, //最多允许10个线程等待处理
customer = 0,//现在处理线程的数目
mutex2=1;//等待处理的线程之间互斥
int p(int* s)//信号量p操作
{
	while (*s <= 0)Sleep(100);//这里不加sleep(100)就不行,很神奇

	(*s) -= 1;

	return 0;
}
int v(int* s)//信号量v操作
{
	(*s)+=1;
	return 0;
}

void process1(void*)//服务线程
{
	while (1)
	{
		p(&customer);
		p(&mutex1);
		cout << "为顾客" << customer+1 << "服务"<<endl;
		v(&mutex1);
		v(&site);
		Sleep(1000);
	}
}
void customers(void*)//用户线程
{

		p(&site);
		p(&mutex2);
		cout << "取号座位为" <<10- site << endl;
		v(&mutex2);
		v(&customer);
		_endthread();
}
int main()
{
	_beginthread(process1,0,NULL
	);
	while (1)
	{
		_beginthread(customers, 0, NULL
		);
		Sleep(100);
		if (customer > 9)//用户线程满了,就等一会
		{
			Sleep(10000);
		}
	}

	getchar();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值