Проверяет знание средств безопасного доступа к общим ресурсам в корутинах.
В корутинах доступны Mutex для мьютексов, Channel и Actor для последовательной обработки сообщений, а также Semaphore из kotlinx.coroutines.sync. Кроме того, существует withContext(Dispatchers.IO) для переключения контекста и atomic примитивы из kotlinx.atomicfu.
1. Mutex
val mutex = Mutex()
mutex.withLock { /* критическая секция */ }2. Semaphore
val sem = Semaphore(permits = 3)
sem.withPermit { /* … */ }3. Channel и Actor
Канал для посылки сообщений между корутинами
actor {} для создания одно-поточного процессора
4. AtomicFu
val counter = atomic(0)
counter.incrementAndGet()5. Вывод:
Выбор зависит от задачи: мьютекс для блокировок, канал для очередей, атомики для счётчиков