Kotlin 正确的互斥方式

Kotlin 正确的互斥方式,kotlin,locking,mutex,kotlinx.coroutines,Kotlin,Locking,Mutex,Kotlinx.coroutines,使用互斥来“同步”改变共享状态的函数的正确方法是什么?在通过launch()或async()启动的协同程序中使用互斥锁可以正常工作,但是如果我通过runBlocking()启动协同程序,线程看起来会被阻塞(锁定)很长一段时间。问题是这个函数可能是从多个线程调用的,我不能用线程限制来解决这个问题。在这种情况下使用互斥体的正确方法是什么?正确的方法是在中设计软件,以避免使用互斥体和其他形式的共享可变状态。如果您有一些需要共享的资源或数据结构,您可以始终将此数据结构封装在单独的协程中,并在需要使用此数

使用互斥来“同步”改变共享状态的函数的正确方法是什么?在通过
launch()
async()
启动的协同程序中使用互斥锁可以正常工作,但是如果我通过
runBlocking()
启动协同程序,线程看起来会被阻塞(锁定)很长一段时间。问题是这个函数可能是从多个线程调用的,我不能用线程限制来解决这个问题。在这种情况下使用互斥体的正确方法是什么?

正确的方法是在中设计软件,以避免使用互斥体和其他形式的共享可变状态。如果您有一些需要共享的资源或数据结构,您可以始终将此数据结构封装在单独的协程中,并在需要使用此数据结构执行任何操作时与此协程通信。这种设计模式被称为演员。参与者是一对协同程序和一个通道,它从中读取传入的消息

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


您可以在中阅读更多有关演员的信息。

请提供代码示例。但是。。这是互斥的预期行为吗?