协程进阶:同步 06. 互斥锁 (Mutex)

本篇解析 example-sync-06.kt。学习如何在协程中安全地保护共享状态。

1. 核心工具:Mutex

Mutex(Mutual Exclusion)是协程中的互斥锁,类似于 Java 的 synchronizedReentrantLock

关键区别:

  • 非阻塞挂起:不同于 ReentrantLock 会阻塞线程,Mutexlock() 是一个挂起函数。当锁被占用时,协程会挂起并释放线程,而不会死等。
  • withLock:便捷的扩展函数,保证了即使在业务逻辑报错时,锁也能被正确释放。

2. 代码解析

1
2
3
4
5
6
val mutex = Mutex()
massiveRun {
mutex.withLock { // 保护临界区
counter++
}
}
  • 结果:Counter = 100000 (准确)。

3. 开发者感悟

Mutex 是处理复杂并发逻辑(例如读写文件、数据库事务)时的终极武器。它保证了同一时间只有一个协程能进入“临界区”。由于它是非阻塞挂起的,它在性能上通常优于传统的线程锁。

,