首页 > 解决方案 > 是在 kotlin 中顺序获取的锁

问题描述

假设我们有一个在 kotlin 中获取锁然后更改值的函数。像这样的东西

fun changeWithLock(newValue) {
    withLock {
        value  = newValue
    }
}

现在,如果此函数被调用两次,那么第一次调用不会立即获取锁,并且两个函数调用都在等待获取锁。

fun changeValue() {
    changewithLock(newValue1)
    changeWithLock(newValue2)
}

变量的最终值是value多少?

标签: androidkotlin

解决方案


这2个方法调用在这里是顺序的(没有启动线程或其他并发处理),因此它们不会处于同时尝试获取锁的情况。

在这种情况下,该值应该始终如一newValue2

如果情况涉及真正并发调用withLock(在同一个锁上),则可能是不确定的情况,但这里不是这种情况。


推荐阅读