C 修正Peterson算法
我知道彼得森算法的默认实现。为我提供相互排斥、进步和有限的等待 正常的彼得森算法如下C 修正Peterson算法,c,multithreading,concurrency,semaphore,mutual-exclusion,C,Multithreading,Concurrency,Semaphore,Mutual Exclusion,我知道彼得森算法的默认实现。为我提供相互排斥、进步和有限的等待 正常的彼得森算法如下 bool flag[0] = false; bool flag[1] = false; int turn; P0: flag[0] = true; turn = 1; while (flag[1] && turn == 1) { // busy wait } // critical section ... // e
bool flag[0] = false;
bool flag[1] = false;
int turn;
P0: flag[0] = true;
turn = 1;
while (flag[1] && turn == 1)
{
// busy wait
}
// critical section
...
// end of critical section
flag[0] = false;
P1: flag[1] = true;
turn = 0;
while (flag[0] && turn == 0)
{
// busy wait
}
// critical section
...
// end of critical section
flag[1] = false;
我希望对这个版本进行一些修改
1) 过程P0中的语句flag[0]=TRUE和flag[0]=FALSE被交换,并且在过程P1中进行了类似的更改。
这个算法能给我提供互斥、进步和有界的等待吗我觉得这个算法不支持互斥。有谁能给我提供更多的信息吗
2) 彼得森解决方案中的while(标志[1]和&turn=1)语句更改为while(标志[1]或turn=[1]),并在流程P1中进行类似更改。产生的系统违反了临界截面的哪些属性,为什么?-这仍然是相互排斥的,但我怀疑进展和有限的等待。有谁能给我提供更多的信息吗
谢谢你抽出时间 参见本文
摘要
1981年最
为两个并发应用程序提供简明版本
过程是彼得森的算法。彼得森使用
决策控制中的OR运算符。
Tanenbaum使用了Peterson的一个声明版本
在中使用AND运算符的算法
决策控制,无需重置
旗帜。我们证明了这个和版本会导致
彼得森原始形式的平凡化。第一
看起来是交错的循环,恢复为批处理
处理。因为批处理是串行的
订单,这样就不需要相互
并行计算中的排除算法
过程。使用Peterson的原始OR运算符
和他一样重新设置标志,每次跑步都是
交错排列的。此外,正如应该预料的那样,一个
彼得森控制操作员上的DeMorgan
支持交织的和版本
与彼得森的原形相同。然而,
这种形式显然并不比原来的简单
或形式。这需要三个额外的时间
操作员和标志仍必须重置
你为什么要这个?这是一个有趣的智力练习,但真正的机器有自己的(更有效的)指令来构建同步。还有唐尼,是的。我有一个练习要解决,有趣的是,这让我的概念变得清晰。