همیشه دسترسی همزمان به یک منبع مشترک در محیط چندنخی، برنامه رو به دردسر میندازه. 🧵⚡️
وقتی دو یا چند «Coroutine» همزمان به یک متغیر یا لیست مینویسن، وضعیت «Race Condition» رخ میده و نتیجه غیرقابل پیشبینی میشه.
برای حل این مشکل، باید از ابزارهای «Thread Safety» مثل «Mutex»، «Semaphore» یا «Atomic» استفاده کنیم. در دنیای «Kotlin Coroutines»، «Mutex» بهترین جایگزین برای «synchronized» هست.
🌀 فرض کن چند «Coroutine» میخان همزمان به یک حساب بانکی واریز کنن. اگر از «Mutex» استفاده نکنیم، موجودی نهایی اشتباه محاسبه میشه.
یک مثال عملی از استفاده از «Mutex» توی «Kotlin»:
این کد تضمین میکنه که هر بار فقط یک «Coroutine» بتونه موجودی رو تغییر بده. نتیجه نهایی همیشه دقیق هست. ✅
💡نکته عملی: برای «Shared Mutable State» توی «Coroutines»، همیشه از «Mutex» یا «StateFlow» استفاده کن؛ نه از «synchronized» سنتی.
#ThreadSafety #Kotlin #Concurrency #Coroutines #Mutex #Android #Jetpack #Codeit
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
وقتی دو یا چند «Coroutine» همزمان به یک متغیر یا لیست مینویسن، وضعیت «Race Condition» رخ میده و نتیجه غیرقابل پیشبینی میشه.
برای حل این مشکل، باید از ابزارهای «Thread Safety» مثل «Mutex»، «Semaphore» یا «Atomic» استفاده کنیم. در دنیای «Kotlin Coroutines»، «Mutex» بهترین جایگزین برای «synchronized» هست.
🌀 فرض کن چند «Coroutine» میخان همزمان به یک حساب بانکی واریز کنن. اگر از «Mutex» استفاده نکنیم، موجودی نهایی اشتباه محاسبه میشه.
یک مثال عملی از استفاده از «Mutex» توی «Kotlin»:
import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
data class BankAccount(var balance: Long = 0)
suspend fun deposit(account: BankAccount, amount: Long, mutex: Mutex) {
mutex.withLock {
account.balance += amount
}
}
fun main() = runBlocking {
val account = BankAccount()
val mutex = Mutex()
val jobs = List(10_000) {
launch(Dispatchers.Default) {
deposit(account, 10, mutex)
}
}
jobs.joinAll()
println(account.balance) // 100_000
}
این کد تضمین میکنه که هر بار فقط یک «Coroutine» بتونه موجودی رو تغییر بده. نتیجه نهایی همیشه دقیق هست. ✅
💡نکته عملی: برای «Shared Mutable State» توی «Coroutines»، همیشه از «Mutex» یا «StateFlow» استفاده کن؛ نه از «synchronized» سنتی.
#ThreadSafety #Kotlin #Concurrency #Coroutines #Mutex #Android #Jetpack #Codeit
🌐 Codeit → https://code-it.ir
━━━━━━━━━━━━━━━
@CodeitMobile
❤2