Czy karliny Kotlin dają jakieś gwarancje „zdarzy się przed”?
Na przykład, czy w tym przypadku istnieje gwarancja „dzieje się przed” między zapisem mutableVar
a późniejszym odczytem (potencjalnie) innego wątku:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Edytować:
Być może dodatkowy przykład lepiej wyjaśni pytanie, ponieważ jest to bardziej Kotlin (z wyjątkiem zmienności). Czy ten kod jest bezpieczny dla wątków:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
środku, podczas gdy pierwszy przykład tworzy go najpierw, mutuje wewnątrz withContext
, a następnie czyta później withContext
. Tak więc pierwszy przykład zawiera więcej funkcji bezpieczeństwa wątków.