本篇解析 example-sync-06.kt。学习如何在协程中安全地保护共享状态。
1. 核心工具:Mutex
Mutex(Mutual Exclusion)是协程中的互斥锁,类似于 Java 的 synchronized 或 ReentrantLock。
关键区别:
- 非阻塞挂起:不同于
ReentrantLock会阻塞线程,Mutex的lock()是一个挂起函数。当锁被占用时,协程会挂起并释放线程,而不会死等。 - withLock:便捷的扩展函数,保证了即使在业务逻辑报错时,锁也能被正确释放。
2. 代码解析
1 | val mutex = Mutex() |
- 结果:Counter = 100000 (准确)。
3. 开发者感悟
Mutex 是处理复杂并发逻辑(例如读写文件、数据库事务)时的终极武器。它保证了同一时间只有一个协程能进入“临界区”。由于它是非阻塞挂起的,它在性能上通常优于传统的线程锁。