MST

星途 面试题库

面试题:Kotlin协程的并发控制与资源管理

在Kotlin协程中,当多个协程并发访问共享资源时,可能会出现资源竞争问题。请描述如何使用协程的相关机制(如Mutex等)来解决这个问题,并给出一个具体的代码示例展示如何在协程中安全地访问和修改共享资源。同时,说明如何在协程结束时正确释放相关资源。
39.9万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

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 块中释放锁,以确保其他协程有机会获取锁并访问共享资源。这样在协程结束时,相关的锁资源就得到了正确释放。