我对二叉树中的Peterson算法有些怀疑。
我正在编写“多处理器编程的艺术”一书的练习,我被困在第2章,前13:
“推广双线程彼得森锁定的另一种方法是安排 一些双线程的Peterson锁在二叉树中。假设n是2的幂。为每个线程分配一个叶锁,它与另一个线程共享。每个锁 将一个线程视为线程0,将另一个线程视为线程1.“
没关系,但是什么?如果Peterson只处理2个线程,这棵树怎么样?一棵树有一片叶子? (因为如果我有2个线程,并且每个叶子处理2个线程......结果将是一个带有单个叶子的树?)
“在树锁的获取方法中,线程获取每个双线程 彼得森锁定从线程的叶子到根。树锁的发布方法 树锁解锁了线程获得的每个2线程Peterson锁, 从根到它的叶子。“
他的意思是什么?叶子如何通过根节点?非常困惑!! :S
谢谢你们!
答案 0 :(得分:7)
使用n个双线程Peterson锁并将它们排列在二叉树中的概括如下:
获取锁定:
解除锁定
获取锁的线程必须释放每个Peterson锁从其从相应的叶到根的路径。
我希望这个解释能为你服务。