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