Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 修正Peterson算法_C_Multithreading_Concurrency_Semaphore_Mutual Exclusion - Fatal编程技术网

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 支持交织的和版本 与彼得森的原形相同。然而, 这种形式显然并不比原来的简单 或形式。这需要三个额外的时间 操作员和标志仍必须重置


你为什么要这个?这是一个有趣的智力练习,但真正的机器有自己的(更有效的)指令来构建同步。还有唐尼,是的。我有一个练习要解决,有趣的是,这让我的概念变得清晰。