操作系统经典独木桥问题

问题描述

相传杭电和理工中间有一条狭窄的南北通道,该通道同一个方向行人可连续通过;当某一方向有学生过通道时,另一个方向的学生必须等待;当某一方向无学生过通道时,另外方向的学生可以过通道。(用信号量解决)
学校课后问题,经过了一些本地化处理,但是思想不变。

解答

		
==================================================

STEP 1:
	ToHDU();		//前往杭电 Hangzhou Dianzi University
	ToZSTU();		//前往理工 Zhejiang Sci-Tech University

==================================================

STEP 2:
	ToHDU()ToZSTU()进程互斥使用路,是互斥关系。
	ToHDU()ToHDU()之间是为了让去杭电的人走完,是同步关系。
	ToZSTU()ToZSTU()也是同步关系
	!!!勘误!!!同向进程间是互斥访问计数器

==================================================

STEP 3:
	int countToHDU = 0;		//计数正在前往杭电的人数
	int countToZSTU = 0;	//计数正在前往理工的人数

	semaphore mutex_countToHDU = 1;	//互斥访问计数变量
	semaphore mutex_countToZSTU = 1;	//互斥访问计数变量
	semaphore mutex_Road = 1;		//互斥使用Road资源

==================================================

STEP 4:
	ToHDU()
	{
		//走进小道
		wait(mutex_countToHDU)if (countToHDU == 0) then wait(mutex_Road);
		countToHDU++;
		signal(mutex_countToHDU);

		passing;

		//走出小道
		wait(mutex_countToHDU);
		countToHDU--if(countToHDU=0)then signal(mutex_Road)signal(mutex_countToHDU)}

	ToZSTU()
	{
		//走进小道
		wait(mutex_countToZSTU)if (countToZSTU == 0) then wait(mutex_Road);
		countToZSTU++;
		signal(mutex_countToZSTU);

		passing;

		//走出小道
		wait(mutex_countToZSTU);
		countToZSTU--if(countToZSTU=0)then signal(mutex_Road)signal(mutex_countToZSTU)}

你可能感兴趣的:(操作系统初探)