kotlin - 一种有效的方法来锁定Kotlin中对特定资源的访问

标签 kotlin locking rmi synchronous virtualfilesystem

我们收到了一个任务,我们必须创建一个分布式文件系统。该文件系统应具有多个服务器,每个服务器执行特定功能。
这个问题与锁服务器有关,锁服务器用于防止两个人一次写入同一文件。每次访问文件的尝试都会生成一个线程,该线程完成后将提供对所请求文件的访问。如果访问了当前不是空闲的文件,则该线程应该被阻塞,直到释放锁为止。使用JAVA时,我可能只使用wait()和notify()方法,但是Kotlin中不存在这些方法(我知道您可以通过强制转换来强制使用它们,但对此不予理))。有没有一种优雅的方法可以做到这一点?我们对可以使用的库没有限制,因此,如果您知道合适的库,我们将很乐意将其检查出来。现在,我认为最适合的一种是ReentrantLock,但是我正在寻找更多的可能性。
我还检查了以下列表:https://stackoverflow.com/a/35521983/7091281
但是列出的所有线程似乎都不适合-我特别需要阻塞线程,而我发现的一切恰恰相反。
顺便说一句,系统的不同部分应该通过RMI进行通信。同样,尽管我们可以按照自己的方式行事,但还是鼓励使用线程代替协程。 (我们应该在JAVA中工作,但是我们被允许使用kotlin和scala)

最佳答案

如果您想使用纯Kotlin,则可以利用协程,尤其是使用Mutex进行锁定。
可以在Kotlin文档中找到有关Shared Mutable State and Concurrency的更多信息

关于kotlin - 一种有效的方法来锁定Kotlin中对特定资源的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64142194/

相关文章:

kotlin - 如何在 Kotlin 的列表中创建包含每两个项目的 map ?

intellij-idea - Kotlin/IntelliJ-编译器无法找到函数的正确参数类型

c++ - std::scoped_lock 或 std::unique_lock 或 std::lock_guard?

c# - 锁定每个用户的创建/更新/删除请求

java - 调用registry.lookup时表中没有这样的对象

java - RMI 对象已经导出

null - 在 Kotlin catch block 中设置一个 val

c# - 我可以重用通过 "using"语句释放的对象吗

java.rmi.ServerException : RemoteException occurred in server thread (ClassNotFoundException)

kotlin - 如何使用Kotlin协程爬网递归结构?