当前位置: 首页 > news >正文

Kotlin互斥锁Mutex协程withLock实现同步

Kotlin互斥锁Mutex协程withLock实现同步

Mutex与Java语言中的Semaphore类似。

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLockfun main() {val A = "a"val B = "b"val C = "c"val repeatCnt = 2//随机协程并发runBlocking {launch(Dispatchers.IO) {print(repeatCnt, A)}launch(Dispatchers.IO) {print(repeatCnt, B)}launch(Dispatchers.IO) {print(repeatCnt, C)}}println("#####")runBlocking {delay(10)}val mutex = Mutex()//使用 Mutex 协程同步runBlocking {launch(Dispatchers.IO) {mutex.withLock {print(repeatCnt, A)}}launch(Dispatchers.IO) {mutex.withLock {print(repeatCnt, B)}}launch(Dispatchers.IO) {mutex.withLock {print(repeatCnt, C)}}}
}private fun print(repeatCnt: Int, tag: String) {runBlocking {repeat(repeatCnt) { it ->val d = (Math.random() * 10).toLong()delay(d)println("$tag-$it $d ${System.currentTimeMillis()}")}}
}

运行输出:

a-0 1 1758548447902
a-1 0 1758548447903
b-0 8 1758548447906
c-0 7 1758548447906
c-1 0 1758548447906
b-1 4 1758548447922
#####
a-0 6 1758548447969
a-1 5 1758548447984
b-0 6 1758548447999
b-1 9 1758548448015
c-0 2 1758548448030
c-1 8 1758548448045

Java与Kotlin中Semaphore相关文章:

https://blog.csdn.net/zhangphil/article/details/132356885

https://blog.csdn.net/zhangphil/article/details/147069067

https://blog.csdn.net/zhangphil/article/details/83410270

http://www.dtcms.com/a/394917.html

相关文章:

  • Seedream 4.0 测评|AI 人生重开:从极速创作到叙事实践
  • vscode clangd 保姆教程
  • MySQL时间戳转换
  • 【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
  • 分布式专题——17 ZooKeeper经典应用场景实战(下)
  • TDengine 2.6 taosdump数据导出备份 导入恢复
  • 探索 Yjs 协同应用场景 - 分布式撤销管理
  • 【软考中级 - 软件设计师 - 基础知识】数据结构之栈与队列​
  • LeetCode 385 迷你语法分析器 Swift 题解:从字符串到嵌套数据结构的解析过程
  • windows系统使用sdkman管理java的jdk版本,WSL和Git Bash哪个更能方便管理jdk版本
  • 生产环境K8S的etcd备份脚本
  • Mac电脑多平台Git账号配置
  • Etcd详解:Kubernetes的大脑与记忆库
  • 深刻理解PyTorch中RNN(循环神经网络)的output和hn
  • 大模型如何赋能写作:从创作到 MCP 自动发布的全链路解析
  • C++设计模式之创建型模式:工厂方法模式(Factory Method)
  • 传输层协议——UDP/TCP
  • 三板汇茶咖空间签约“可信资产IPO与数链金融RWA”链改2.0项目联合实验室
  • 【MySQL】MySQL 表文件误删导致启动失败及无法外部连接解决方案
  • LVS简介
  • 如何将联系人从iPhone转移到iPhone的7种方法
  • 『 MySQL数据库 』MySQL复习(一)
  • 3005. 最大频率元素计数
  • ACP(七)优化RAG应用提升问答准确度
  • 鸿蒙:使用bindPopup实现气泡弹窗
  • Langchan4j 框架 AI 无限循环调用文件创建工具解决方案记录
  • Python GIS 开发里最核心的4个基础组件(理论+实操篇)
  • 关于跨域和解决方案
  • 学习日报 20250921|LoadingCache
  • 聚力赋能|竹云受邀出席2025华为全联接大会