不同意彼得森的解决方案

时间:2015-11-25 19:34:32

标签: c++ operating-system critical-section

#define FALSE 0
#define TRUE 1
#define N 2

int turn;
int interested[N];

void enter_region(int process) {
  int other;
  other = 1 - process;
  interested[process] == TRUE;
  turn = process; // set flag
  while (turn == process && interested[other] == TRUE)
}
void leave_region(int process) { interested[process] = FALSE; }
如果在进程0执行语句后发出时钟中断,

不会违反关键区域的第三个标准

interested[process]==TRUE; 

因为进程一会在while循环中等待整个处理器时间被处理器0阻塞。

Perterson的解决方案或algoruthm是一种着名的互斥编程算法,允许两个进程共享一次性资源而不会发生冲突,只使用共享内存进行通信。

我所指的标准是:在关键区域之外运行的流程不会阻止任何流程。

1 个答案:

答案 0 :(得分:2)

要进入关键部分的进程必须被尚未完全释放的进程阻止。这是互斥算法的明确目的。

第三个标准是在关键部分之外运行的进程不会阻止其他进程。流程1不会阻止其他流程,只能由尚未发布关键部分的流程阻止。所以第三个标准没有被违反。

如果您仍然不同意,请解释流程1如何阻止其他流程,或解释流程1如何被其关键部分之外的流程阻止。

相关问题