2

使用 Mutex 改变共享状态的“同步”功能的正确方法是什么?在协程中使用 Mutex 以预期方式启动launch()async()按预期工作,但是如果我用runBlocking()线程启动协程,看起来就像被阻塞(锁定)了很长时间。问题是该函数可能是从多个线程调用的,而我无法通过线程限制来解决这个问题。在这种情况下使用 Mutex 的正确方法是什么?

4

1 回答 1

1

正确的方法是设计您的软件,以便完全避免使用Mutex和其他形式的共享可变状态。如果你有一些资源或数据结构需要共享,你总是可以将这个数据结构封装在一个单独的协程中,并在你需要对这个数据结构做任何事情时与这个协程通信。这种设计模式被称为演员。Actor 是一对协程和一个从其读取传入消息的通道。

这种方法的优点是您可以与参与者进行异步通信。如果您向参与者发送消息并且不等待响应,那么您可以继续工作而无需等待参与者完成处理您的消息。

您可以在kotlinx.coroutines 指南中阅读更多关于演员的信息。

于 2018-04-24T09:37:16.630 回答