首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >科特林有多平台锁吗?

科特林有多平台锁吗?
EN

Stack Overflow用户
提问于 2019-07-04 07:37:08
回答 3查看 2.4K关注 0票数 10

多平台 Kotlin代码中应该使用什么多平台锁定或同步方法?在之前的Java代码中,我使用了synchronized,我也可以在Kotlin中看到synchronized。但是,它被标记为不推荐使用,并将很快从common std库中删除。

我可以看到withLock,但它只支持JVM,而不是多平台。

有什么想法吗?

PS。目前,我们不想迁移到Kotlin,因为重写和coroutines库占用过多(对于具有严格磁盘占用要求的Android库来说太大了)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-04 07:56:04

来自Kotlin/本地并发文档(这里):

Kotlin中的并发/本地 Kotlin/本机运行时不鼓励使用具有互斥代码块和条件变量的经典面向线程并发模型,因为该模型众所周知容易出错且不可靠。相反,我们建议一组替代方法,允许您使用硬件并发性并实现阻塞IO。这些办法如下,并将在进一步的章节中加以阐述:

  • 具有消息传递的工人
  • 对象子图所有权转移
  • 对象子图冻结
  • 对象子图分离
  • 使用C全局的原始共享内存
  • 阻塞操作的合作机制(本文件未涉及)

在Kotlin/本地设计中,锁似乎没有暴露出来。有一些实现(参见Lock.kt),但是该类被标记为internal

然而,在KTOR (非常有限的文档源代码)中有一个多平台的锁实现。它是公开的,但标记为@InternalApi,这可能会影响其稳定性。

您也可能对这个KotlinLang讨论线程感兴趣:同步替换

票数 5
EN

Stack Overflow用户

发布于 2019-07-04 07:53:14

在Kotlin公共系统中没有锁也没有同步。Kotlin的方法是使用不变的数据。您可以在JVM原住民中添加您自己的expect AtomicReference的共同实现和实际实现,这将有很大帮助。还请记住,本机的协同线目前是单线程的。此外,您不能在本机线程之间共享可变状态。

票数 4
EN

Stack Overflow用户

发布于 2019-11-04 07:18:25

Kotlin协同库中有完整的“锁”多平台实现。它是基于原子库的,我认为可以很容易地从其中提取,即使您真的不想依赖于完整的协同库:

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56882860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档