gpt4 book ai didi

java - 使用原子变量在 Java 中实现互斥量

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:36:19 26 4
gpt4 key购买 nike

我想在 Java 中使用原子变量实现互斥体。我尝试使用 lamport bakery 算法实现它并且它有效。但是如果我之前不知道线程数,我不确定如何实现它。

另外,lamport算法不断增加labels会溢出,如何避免?

最佳答案

创建一个简单的 TTAS(测试、测试和设置)自旋锁相当简单:

class TTASLock {
private final AtomicLong thread = new AtomicLong();

void lock() {
while (true) {
if (thread.get() == 0) { // test
if (thread.compareAndSet(0, Thread.currentThread().getId())) // testAndSet
return;
}
}
}

void unlock() {
thread.compareAndSet(Thread.currentThread().getId(), 0)
}
}

这是一个非常简单的自旋锁。从逻辑 pov 来看,测试、测试和设置范式并不是严格必需的,但它是一项关键的性能改进,因此在争用下,等待获取锁的线程不会因失败的 CAS 操作而不断使 Level2 缓存行无效。

关于java - 使用原子变量在 Java 中实现互斥量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com