Ответ
В Kotlin корутины можно синхронизировать с помощью:
- Mutex – блокирует доступ к общему ресурсу:
val mutex = Mutex()
var counter = 0
fun main() = runBlocking {
repeat(100) {
launch {
mutex.withLock {
counter++
}
}
}
}
- Actor – инкапсулирует состояние и обрабатывает сообщения последовательно:
val counterActor = actor<Int> {
var counter = 0
for (msg in channel) {
counter += msg
}
}
-
Потокобезопасные структуры (Atomic, Concurrent коллекции).
-
@Volatile для примитивов (но лучше использовать Atomic).
Для сложных сценариев предпочтительнее Mutex или Actor, так как они обеспечивают последовательный доступ без блокировки потока.