Apakah Kotlin coroutine memberikan jaminan "terjadi sebelum"?
Sebagai contoh, apakah ada jaminan "terjadi sebelum" antara menulis ke mutableVar
dan selanjutnya membaca (berpotensi) utas lain dalam kasus ini:
suspend fun doSomething() {
var mutableVar = 0
withContext(Dispatchers.IO) {
mutableVar = 1
}
System.out.println("value: $mutableVar")
}
Edit:
Mungkin contoh tambahan akan memperjelas pertanyaan lebih baik karena itu lebih Kotlin-ish (kecuali untuk mutabilitas). Apakah kode ini thread-safe:
suspend fun doSomething() {
var data = withContext(Dispatchers.IO) {
Data(1)
}
System.out.println("value: ${data.data}")
}
private data class Data(var data: Int)
withContext
, sedangkan contoh 1 menciptakannya terlebih dahulu, bermutasi di dalam withContext
, dan kemudian membacanya withContext
. Jadi contoh pertama menggunakan lebih banyak fitur keamanan benang.