面试题答案
一键面试1. 使用Mutex解决资源竞争问题
在Kotlin协程中,Mutex
用于控制对共享资源的访问。Mutex
类似于传统的互斥锁,同一时间只有一个协程可以获取锁并访问共享资源,其他协程需要等待锁被释放。
2. 代码示例
import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Mutex
// 定义共享资源
private var sharedResource = 0
// 定义Mutex
private val mutex = Mutex()
fun main() = runBlocking {
// 创建多个协程并发访问共享资源
val jobs = List(10) {
launch {
// 获取锁
mutex.lock()
try {
// 安全地访问和修改共享资源
sharedResource++
println("Shared resource value: $sharedResource")
} finally {
// 释放锁
mutex.unlock()
}
}
}
// 等待所有协程完成
jobs.forEach { it.join() }
}
3. 资源释放说明
在上述代码中,使用 try - finally
块来确保无论在访问共享资源时是否发生异常,锁都会被正确释放。mutex.lock()
获取锁,开始对共享资源的访问,mutex.unlock()
在 finally
块中释放锁,以确保其他协程有机会获取锁并访问共享资源。这样在协程结束时,相关的锁资源就得到了正确释放。