码迷,mamicode.com
首页 > 编程语言 > 详细

进程互斥(三)Peterson算法

时间:2015-06-29 10:08:06      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:java   操作系统   进程互斥   peterson算法   

相对于Dekker算法(参见进程互斥(二)Dekker算法),Peterson算法简化了进程互斥的实现。


假设有两个进程需要互斥的访问某一个临界区。


Peterson算法的形式如下:

		enterRegion(process);// process表示进程号
		// 临界区
		leaveRegion(process);


具体实现如下(Java实现):

有两个全局变量:

	// 用于表示轮到哪个进程
	private int turn;
	// 用于表示进程进入临界区的意愿,下标对应进程号
	private boolean[] interested = new boolean[] {false, false};

enterRegion方法实现如下:

        /**
	 * @param process 进程号
	 */
	public void enterRegion(int process) {
		// 另一个进程的进程号
		int other = 1 - process;
		
		// 进程process想进入临界区
		interested[process] = true;
		
		// 设置轮到自己进入临界区了
		turn = process;
		
		/**
		 * 当两个进程同时想进入临界区时,它们的interested[process]都
		 * 为true,但后一个进程设置的turn值会覆盖前一个进程设置的turn值,
		 * 这样后一个进程的turn == process条件为真,它会在该while循环
		 * 中持续等待,而前一个进程的turn == process条件为假,能顺利进入
		 * 临界区;等前一个进程离开临界区后,后一个进程也能进入临界区
		 */
		while (turn == process && interested[other] == true) {
			
		}
	}

leaveRegion方法实现如下:

	public void leaveRegion(int process) {
		interested[process] = false;
	}


进程互斥(三)Peterson算法

标签:java   操作系统   进程互斥   peterson算法   

原文地址:http://blog.csdn.net/l294265421/article/details/46674847

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!