Les coroutines Kotlin offrent-elles des garanties de «survenance avant»?
Par exemple, existe-t-il une garantie «passe avant» entre l'écriture mutableVar
et la lecture ultérieure sur (potentiellement) un autre thread dans ce cas:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Éditer:
Un exemple supplémentaire clarifiera peut-être mieux la question, car il s'agit davantage de Kotlin-ish (sauf pour la mutabilité). Ce code est-il sûr pour les threads:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
, tandis que le 1er exemple le crée d'abord, mute à l'intérieur withContext
, puis lit après withContext
. Ainsi, le 1er exemple exerce plus de fonctionnalités de sécurité des threads.