algorithm - 通过比较两种算法来满足进程进度的临界区算法?

标签 algorithm operating-system deadlock critical-section

这是临界区的两种算法。第一个是不满足渐进的要求,第二个是解决方案。我认为第二个有问题,但我的讲师不承认。在每个进程进入提醒部分后,我们需要以某种方式将 turn 分配给新值吗?对吗?

boolean flag[2];
initially flag [0] = flag [1] = false.
flag [i] = true 
//Pi ready to enter its critical section
//Process Pi
do {
   flag[i] = true;
   while (flag[j]) ;
   critical section
   flag [i] = false;
   remainder section
} while ( … );

它满足互斥但不满足进步,现在通过将其更改为我们满足进步的需要:

int turn;
boolean flag[2];
initially flag [0] = flag [1] = false, turn = i (or j)
Process Pi
do {
   flag [i] = true;
   turn = j;
   while (flag [j] and turn = j) ;
   critical section
   flag [i] = false;
remainder section
while(...);

最佳答案

第二种算法是正确的。

turn变量仅在两个 进程正在等待彼此的标志时才相关。

不需要重新设置turn在退出临界区时,因为它会在再次测试其值之前被重置——由下一个试图进入临界区的进程进行。

关于algorithm - 通过比较两种算法来满足进程进度的临界区算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19919712/

相关文章:

algorithm - 该算法使用什么数据结构?

operating-system - NXT 的 BSD

c# - 从 XP 及更高版本获取 Windows 操作系统名称

c++ - 在卸载 DLL 期间删除静态对象时退出线程会导致死锁?

winapi - 诊断 Win32 程序中的死锁

c - 三角剖分算法

c# - 组合、幂集 不知道从哪里开始

algorithm - 在不到 O(n^2) 的时间内模拟许多物体之间的重力

c++ - Powershell命令查看远程机器OS类型是否为2008 R2

java - 应用程序陷入僵局