在多平台 Kotlin代码中应该使用什么多平台锁定或同步方法?在之前的Java代码中,我使用了synchronized,我也可以在Kotlin中看到synchronized。但是,它被标记为不推荐使用,并将很快从common std库中删除。
我可以看到withLock,但它只支持JVM,而不是多平台。
有什么想法吗?
PS。目前,我们不想迁移到Kotlin,因为重写和coroutines库占用过多(对于具有严格磁盘占用要求的Android库来说太大了)。
发布于 2019-07-04 07:56:04
来自Kotlin/本地并发文档(这里):
Kotlin中的并发/本地 Kotlin/本机运行时不鼓励使用具有互斥代码块和条件变量的经典面向线程并发模型,因为该模型众所周知容易出错且不可靠。相反,我们建议一组替代方法,允许您使用硬件并发性并实现阻塞IO。这些办法如下,并将在进一步的章节中加以阐述:
在Kotlin/本地设计中,锁似乎没有暴露出来。有一些实现(参见Lock.kt),但是该类被标记为internal。
然而,在KTOR (非常有限的文档,源代码)中有一个多平台的锁实现。它是公开的,但标记为@InternalApi,这可能会影响其稳定性。
您也可能对这个KotlinLang讨论线程感兴趣:同步替换
发布于 2019-07-04 07:53:14
在Kotlin公共系统中没有锁也没有同步。Kotlin的方法是使用不变的数据。您可以在JVM原住民中添加您自己的expect AtomicReference的共同实现和实际实现,这将有很大帮助。还请记住,本机的协同线目前是单线程的。此外,您不能在本机线程之间共享可变状态。
https://stackoverflow.com/questions/56882860
复制相似问题