从其他一些StackOverflow答案中,如果需要保护属性或函数不受并发协同执行的影响,则似乎需要互斥。但是,我今天碰巧看到了StateFlow.kt的源代码,并注意到:
该属性是线程安全的,可以在没有外部同步的情况下从并发协同中安全地更新。
进一步看一下实现,它所拥有的只是没有互斥的区块。
所以问题是,@同步或同步关键字在Kotlin协同中工作吗?论坛的讨论大多表明他们没有,但官方的StateFlow实施表明并非如此。
发布于 2022-10-16 22:25:39
它们可以工作,但是应该首选Mutex,因为它们可以挂起,从而避免了像synchronized那样阻塞线程。
要使一些真正的线程安全,例如StateFlow的value属性(可以从协同线内部或外部的任何线程设置),需要传统的同步。
如果一个函数或属性仅从协同器中访问,那么它就不需要传统的同步。
https://stackoverflow.com/questions/74090943
复制相似问题