Предоставляют ли сопрограммы Kotlin какие-либо гарантии «произойдет раньше»?
Например, существует ли гарантия «происходит до» между записью в mutableVar
и последующим чтением (потенциально) в другом потоке в этом случае:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Редактировать:
Может быть, дополнительный пример прояснит вопрос лучше, потому что это больше Kotlin-иш (за исключением изменчивости). Является ли этот код потокобезопасным:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
, тогда как в первом примере он сначала создается, изменяется внутри withContext
, а затем читает после withContext
. Таким образом, в первом примере реализованы дополнительные функции безопасности потоков.