ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

第109篇 Mutex 与信号量:协程世界的锁

第109篇 Mutex 与信号量:协程世界的锁 上一节讲 Channel 是怎么传数据的,这一节讲共享资源怎么保护。synchronized在 Java 里管用,是因为"线程"既是执行单位也是互斥单位;协程世界里执行单位是协程、跑在线程池上,同一个synchronized块可能由不同线程执行——这直接导致synchronized在协程里不再可靠。这一节讲清 Mutex、信号量,以及这套机制在 Android 里的实际落点。先把结论放在前面:synchronized在挂起函数里是无效的(编译器会直接报错,因为它持锁时会跨越挂起点)。协程环境下的互斥要用Mutex;限制并发数要用Semaphore。两者都由kotlinx.coroutines.sync提供。判据是:需要"同一时刻只允许一个进入"用 Mutex;需要"同时最多允许 N 个进入"用 Semaphore。机制背后的执行路径Mutex的核心 API 是withLock:val mutex = Mutex() suspend fun safeUpdate() = mutex.withLock { // 临界区:同一时刻只有一个协程能进 sharedState = compute(sharedState) }withLock内部是
返回列表