Codeit Mobile
94 subscribers
3 photos
1 video
243 links
📱 آموزش برنامه‌نویسی موبایل

Kotlin • Android

🚀 آموزش ساده، کاربردی و پروژه‌محور
💡 مخصوص توسعه‌دهندگان موبایل
Download Telegram
همیشه دسترسی همزمان به یک منبع مشترک در محیط چندنخی، برنامه رو به دردسر می‌ندازه. 🧵⚡️

وقتی دو یا چند «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