MOBILEPROGLIB Telegram 6292
🔒 Основные сценарии использования Mutex в Kotlin

Когда несколько корутин обращаются к общим данным или ресурсам одновременно, возникает риск гонок данных (race conditions).

Mutex (mutual exclusion) — это инструмент синхронизации, который помогает управлять доступом к общим ресурсам, гарантируя, что в один момент времени их изменяет только одна корутина.

Вот самые частые примеры, когда Mutex действительно нужен:

1️⃣ Защита разделяемого изменяемого состояния

Самый распространённый случай — безопасный доступ к общей переменной:

class CounterService {
private var counter = 0
private val mutex = Mutex()

suspend fun increment() {
mutex.withLock {
counter++
}
}

suspend fun getCount(): Int {
return mutex.withLock {
counter
}
}
}


2️⃣ Координация доступа к ресурсу

Когда несколько корутин должны поочерёдно работать с общим ресурсом:

class FileWriter(private val file: File) {
private val mutex = Mutex()

suspend fun appendLine(line: String) {
mutex.withLock {
file.appendText("$line\n")
}
}
}


3️⃣ Обеспечение последовательного выполнения

Когда операции должны выполняться строго по порядку, даже если запущены одновременно:

class OrderProcessor {
private val mutex = Mutex()
private val orders = mutableListOf<Order>()

suspend fun processOrder(order: Order) {
mutex.withLock {
// Обеспечиваем последовательную обработку заказов
orders.add(order)
validateOrder(order)
persistOrder(order)
}
}
}


4️⃣ Отложенная инициализация с защитой потоков

Обеспечивает безопасную инициализацию ресурса в асинхронных контекстах:

class DatabaseConnection {
private var connection: Connection? = null
private val mutex = Mutex()

suspend fun getConnection(): Connection {
if (connection != null) return connection!!

return mutex.withLock {
// Повторная проверка внутри блокировки
connection ?: createConnection().also { connection = it }
}
}

private suspend fun createConnection(): Connection {
delay(1000) // Симуляция установки соединения
return Connection()
}
}


🐸 Библиотека мобильного разработчика

#АрхитектурныйКод #JuniorKit #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51



tgoop.com/mobileproglib/6292
Create:
Last Update:

🔒 Основные сценарии использования Mutex в Kotlin

Когда несколько корутин обращаются к общим данным или ресурсам одновременно, возникает риск гонок данных (race conditions).

Mutex (mutual exclusion) — это инструмент синхронизации, который помогает управлять доступом к общим ресурсам, гарантируя, что в один момент времени их изменяет только одна корутина.

Вот самые частые примеры, когда Mutex действительно нужен:

1️⃣ Защита разделяемого изменяемого состояния

Самый распространённый случай — безопасный доступ к общей переменной:

class CounterService {
private var counter = 0
private val mutex = Mutex()

suspend fun increment() {
mutex.withLock {
counter++
}
}

suspend fun getCount(): Int {
return mutex.withLock {
counter
}
}
}


2️⃣ Координация доступа к ресурсу

Когда несколько корутин должны поочерёдно работать с общим ресурсом:

class FileWriter(private val file: File) {
private val mutex = Mutex()

suspend fun appendLine(line: String) {
mutex.withLock {
file.appendText("$line\n")
}
}
}


3️⃣ Обеспечение последовательного выполнения

Когда операции должны выполняться строго по порядку, даже если запущены одновременно:

class OrderProcessor {
private val mutex = Mutex()
private val orders = mutableListOf<Order>()

suspend fun processOrder(order: Order) {
mutex.withLock {
// Обеспечиваем последовательную обработку заказов
orders.add(order)
validateOrder(order)
persistOrder(order)
}
}
}


4️⃣ Отложенная инициализация с защитой потоков

Обеспечивает безопасную инициализацию ресурса в асинхронных контекстах:

class DatabaseConnection {
private var connection: Connection? = null
private val mutex = Mutex()

suspend fun getConnection(): Connection {
if (connection != null) return connection!!

return mutex.withLock {
// Повторная проверка внутри блокировки
connection ?: createConnection().also { connection = it }
}
}

private suspend fun createConnection(): Connection {
delay(1000) // Симуляция установки соединения
return Connection()
}
}


🐸 Библиотека мобильного разработчика

#АрхитектурныйКод #JuniorKit #Kotlin

BY Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck


Share with your friend now:
tgoop.com/mobileproglib/6292

View MORE
Open in Telegram


Telegram News

Date: |

Some Telegram Channels content management tips “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group. 4How to customize a Telegram channel? More>> It’s easy to create a Telegram channel via desktop app or mobile app (for Android and iOS):
from us


Telegram Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck
FROM American