簡體   English   中英

Kotlin 中是否有多平台鎖?

[英]Is there multiplatform lock in Kotlin?

多平台Kotlin 代碼中應該使用什么多平台 Lock 或同步方法? 以前在 Java 代碼中我使用了synchronized ,我也可以在 Kotlin 中看到synchronized 但是它被標記為已棄用,很快就會從common標准庫中刪除。

我可以看到withLock ,但它僅在JVM上受支持,在多平台上不受支持。

有什么想法嗎?

附注。 目前我們不想遷移到 Kotlin 協程,因為重寫和協程庫占用過多(對於具有嚴格磁盤占用空間要求的 Android 庫來說太大)。

來自 Kotlin/Native Concurrent 文檔( 這里):

Kotlin/Native 中的並發

Kotlin/Native 運行時不鼓勵具有互斥代碼塊和條件變量的經典的面向線程的並發模型,因為已知該模型容易出錯且不可靠。 相反,我們建議使用一系列替代方法,允許您使用硬件並發並實現阻塞 IO。 這些方法如下,它們將在進一步的部分中詳細說明:

  • 具有消息傳遞功能的工人
  • 對象子圖所有權轉移
  • 對象子圖凍結
  • 對象子圖分離
  • 使用 C 全局變量的原始共享內存
  • 用於阻塞操作的協程(本文檔未涵蓋)

Kotlin/Native 的設計似乎沒有公開鎖。 一些實現(參見Lock.kt ),但是該類被標記為internal

但是,在 KTOR 中有一個多平台的鎖實現(非常有限的文檔源代碼)。 它是公開的,但標有@InternalApi ,這可能會影響其穩定性。

您可能還對 KotlinLang 討論主題感興趣: Replacement for synchronized

Kotlin common 中沒有鎖也沒有同步。 Kotlin 的方法是使用不可變數據。 您可以在 JVM Native 中的常見和實際實現中添加您自己的期望 AtomicReference,它將有很大幫助。 還要記住,Native 中的協程目前是單線程的。 此外,您不能在 Native 的線程之間共享可變狀態。

Kotlin 協程庫中有完整的“鎖定”多平台實現。 它基於 atomicfu,我認為可以從那里輕松提取,即使您真的不想依賴完整的協程庫:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM