multithreading - 德克算法

标签 multithreading mutual-exclusion

我知道dekker算法的外观如何,但是为什么这样的方法行不通?

static void Enter(int i)
    {
        int j = 1 - i;
        flags[i] = true;
        if(flags[j])
        {
            while (turn!=i)
            {                    
            }
        }
    }
    static void Exit(int i)
    {
        flags[i] = false;
        turn = 1 - i;
    }

我的解决方案出了什么问题?

最佳答案

有很多简单的方法可以将Dekker's algorithm(例如Peterson's algorithm)与您的代码非常相似。根据Wiki的说法,Dekker's是该问题的第一个正确解决方案,因此也就不足为奇了。

简短查看之后,您的代码似乎可以正常工作,但是如果没有正式的证明,就无法保证。

关于multithreading - 德克算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15865629/

相关文章:

c# - 有哪些工具可用于测试多线程 .net 代码?

c# - 循环中的 WPF 应用程序,如何不让整个应用程序卡住?

c - 并行矩阵计算

linux - 没有 exec 的 fork,共享对象使用的 pthread_mutex_t

php - 什么等同于 PHP 中的 C# lock 语句?

algorithm - 这是否坚持互斥 : Concurrent programming?

python - argparse 和互斥组,每个组都有自己需要的设置

ruby - 在 Ruby 中高效地将数据从大型 CSV(或数据流)导入 Neo4j

javascript - JavaScript 或 jQuery 中的临界区

c - 我的自旋锁实现是否正确且最佳?