Concurrency 二叉树中的彼得森锁

Concurrency 二叉树中的彼得森锁,concurrency,locking,mutual-exclusion,Concurrency,Locking,Mutual Exclusion,我对二叉树中的彼得森算法有些怀疑 我正在做“多处理器编程的艺术”一书的一些练习,我被困在第2章,ex 13: 推广双线程Peterson锁的另一种方法是 二叉树中的多个双线程Peterson锁。假设n是2的幂。每个线程分配一个叶锁,它与另一个线程共享。每个锁 将一个线程视为线程0,另一个线程视为线程1。“ 没关系,但是什么?如果Peterson只处理2个线程,那么这棵树将如何处理?一棵树只有一片叶子?(因为如果我有两个线程,每个叶子处理两个线程…结果将是一个有一个叶子的树?) 在树锁的获取方法中

我对二叉树中的彼得森算法有些怀疑

我正在做“多处理器编程的艺术”一书的一些练习,我被困在第2章,ex 13:

推广双线程Peterson锁的另一种方法是 二叉树中的多个双线程Peterson锁。假设n是2的幂。每个线程分配一个叶锁,它与另一个线程共享。每个锁 将一个线程视为线程0,另一个线程视为线程1。“

没关系,但是什么?如果Peterson只处理2个线程,那么这棵树将如何处理?一棵树只有一片叶子?(因为如果我有两个线程,每个叶子处理两个线程…结果将是一个有一个叶子的树?)

在树锁的获取方法中,线程每两个线程获取一次 Peterson锁从该线程的叶到根。树锁的释放方法 树锁解锁线程已获取的每个2线程Peterson锁, 从根到叶。”

他说这话是什么意思?叶如何通过根节点?非常困惑!!:


谢谢你们

使用n个双线程Peterson锁并将其排列在二叉树中的一般方法如下:

获取锁:

  • 假设有n个线程想要访问一个关键区域
  • 第一步使用n/2个双线程Peterson锁。然后为彼得森锁上的每两个线程分配两个线程。在该步骤结束时,只有n/2个线程获得了锁。这n/2个双线程Peterson锁是二叉树的叶子
  • 与第一步类似,第二步使用n/4两个线程Peterson锁,并为每个Peterson锁分配两个线程(这些线程是第一步中的“赢家”)。这些n/4彼得森锁是树的新节点
  • 这个过程一直持续到它到达根目录,在那里只需要一个彼得森锁。获取最后一个彼得森锁的线程可以进入临界区域
  • 释放锁

    获取锁的线程必须释放从相应叶到根的路径中的每个彼得森锁


    我希望这个解释能为您服务。

    谢谢您,乔斯!我真的很困惑这个问题!现在我可以开始了!非常感谢=)我认为这句话太复杂了