gpt4 book ai didi

java - Java 中的分层互斥锁

转载 作者:搜寻专家 更新时间:2023-10-30 21:31:13 24 4
gpt4 key购买 nike

我希望能够基于文件系统层次结构进行锁定。例如:

线程 1:

lock("/");
doStuff();
unlock();

线程 2:

lock("/sub/foo");
doStuff();
unlock();

线程 3:

lock("/sub/bar");
doStuff();
unlock();

如果线程 1 先获取锁,则线程 2 和 3 将被阻塞,直到线程 1 解锁。但是,如果线程 2 先获取锁,那么线程 3 应该能够与线程 2 同时执行。一般规则是,如果父目录上有锁,则线程必须阻塞。

Java 有什么内置的东西可以帮助解决这个问题吗?我想避免为每个目录存储一个锁,因为会有数十万个目录。

最佳答案

我会像这样将目录路径存储在树中:

- /
- sub
- foo
- bar

每当你需要锁定那棵树中的任何东西时,你从根向下并获得除了目标节点本身之外的所有东西的读锁。目标节点获得写锁。

这个方案保证了树相关部分的无死锁和稳定性。

我没有发现存储数十万把锁有什么特别的问题。每个锁可能会浪费 100 字节的 RAM。但它简化了架构。你有没有测量它是否真的是一个问题?

作为替代方案,您可以使用从路径到锁的 map 。该字典上的所有操作都必须由调用者同步。这允许您延迟初始化锁。您还可以定期对未使用的锁进行垃圾收集,方法是首先在根上获取一个写锁,这会停止所有操作。一旦一切都安静下来,您将丢弃所有非根锁。

关于java - Java 中的分层互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9301631/

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