繁体   English   中英

互斥,如何使用 Lamport 的烘焙算法实现 try_lock() 方法?

[英]Mutual exclusions, How to implement try_lock() method using Lamport's Bakery Algorithm?

我正在尝试使用 Lamport 的面包店算法和 C++ 中的可锁定概念来创建 BakeryLock 抽象。 实现 lock()、unlock() 方法非常容易。 有人可以帮我实现 try_lock() 方法吗? 在此处输入图像描述 从文档:

m.try_lock()

效果:尝试获取当前执行代理的锁而不阻塞。 如果抛出异常,则不应为当前执行代理获取锁。

返回类型:布尔

返回:如果获得了锁,则返回 true,否则返回 false。

我在 C++ 中提出了以下解决方案,但尚未完全测试。

bool ImprovedBakeryLock::try_lock(int i)
{
    Entering[i] = true;
    Number[i] = 1 + max(Number[1], ..., Number[NUM_THREADS]);
    Entering[i] = false;
    bool acquired = true;
    for (int j = 1; j <= NUM_THREADS && acquired; ++j) {
        if (Number[j] != 0 && Number[j] < Number[i]){
            acquired = false;
            Number[i] = 0;
        }
    }
    return acquired;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM