【问题标题】:Peterson Lock in a binary tree二叉树中的彼得森锁
【发布时间】:2013-09-02 15:21:38
【问题描述】:

我对二叉树中的彼得森算法有一些疑问。

我正在对“多处理器编程的艺术”一书进行一些练习,但我被困在第 2 章,前 13 章:

"另一种概括双线程彼得森锁的方法是安排 二叉树中的多个 2 线程 Peterson 锁。假设 n 是 2 的幂。每个线程都被分配了一个叶锁,它与另一个线程共享。每把锁 将一个线程视为线程 0,将另一个视为线程 1。”

没关系,但是呢?如果 Peterson 只处理 2 个线程,那么这棵树会怎么样?一树一叶? (因为如果我有 2 个线程,并且每个叶子处理 2 个线程......结果将是一棵只有一片叶子的树?)

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

他是什么意思?叶子如何通过根节点?很混乱!! :S

谢谢你们!

【问题讨论】:

    标签: concurrency locking mutual-exclusion


    【解决方案1】:

    使用 n 个双线程 Peterson 锁并将它们排列在二叉树中的概括如下:

    获取锁:

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

    解除锁定

    获得锁的线程必须释放从相应叶子到根的路径中的每个 Peterson 锁。

    我希望这个解释对你有用。

    【讨论】:

    • 谢谢乔斯!我真的对这个问题感到困惑!现在我可以开始了!非常感谢=)我觉得这个说法太复杂了xD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多