我理解用于互斥的算法,例如Dekker的算法和Peterson的算法,需要一个潜在的顺序一致的内存模型才能工作(或者使用内存屏障),但我不清楚它们是否需要原子负载和存储。在 for Peterson的算法中,它说:
该算法满足了求解临界截面问题的三个基本准则,只要变量的变化立即和原子地传播到变量转、标志和标志。我不清楚上面引用的位,以及这是否意味着该算法需要原子负载和存储才能工作。看看Peterson的算法
我的教授给了我标准的Dekker算法的代码,我需要通过实现我们自己的算法在NachOS上进行测试。但我在我教授的代码中发现了一个有希望的错误。以下是Dekker提供给我们的代码片段:{ while (flagwhile ((*turn) == (1-id)); // mark this while loop
flag[id] =
我正在尝试一些相互执行的算法。我已经实现了彼得森的算法。它打印正确的计数器值,但有时它似乎就像出现了某种类型的死锁,无限期地延迟了执行。这是不可能的,因为这个算法是无死锁的。PPS:当原子存储/加载受害者字段时,问题似乎消失了,这使得编译器的优化更加可疑 "fmt")
type mutex struct
我有一个FIFO队列,生产者和消费者,我尝试了不同的组合,除了这种安排。我应该能够用3个生产者,2个消费者,10个用于FIFO的插槽来运行它,并且一开始没有信号量,然后让信号量处于活动状态。#include "oslab_lowlevel_h.h"
* and an integer for the Produ