Mutex
- Kotlin kursu
- İleri seviye
- Ders 67/83
- 5 dk
Mutex ile karşılıklı dışlama öğrenirsin.
Mutex ile karşılıklı dışlama
Mutex, bir kod bloğuna aynı anda yalnız bir coroutine girmesini sağlar. withLock { } ile kilit alınır ve blok bitince otomatik bırakılır.
Örnek: val m = Mutex(); m.withLock { counter++ }. İki coroutine aynı anda counter'ı artırmaz; biri bekler. withLock, kilidi lambda sonunda otomatik bırakır; try/finally gerektirmez. Bu kalıp, paylaşılan değişken durum için güvenli erişim sağlar.
withLock ve otomatik bırakma
withLock, kilidi lambda başında alır, sonda otomatik bırakır. İstisna durumunda bile kilit bırakılır; bu yüzden lock/unlock elle yönetmekten daha güvenlidir.
Örnek: m.withLock { shared.add(item) }. Eğer add exception fırlatsa bile Mutex serbest kalır. Bu kalıp, hataya dayanıklı eşzamanlı kod yazmayı kolaylaştırır; yanlışlıkla kilitli kalma riskini ortadan kaldırır.
Uygulama Mutex ile kilitli blok
main fonksiyonunu runBlocking ile aç. val m = Mutex() oluştur ve m.withLock { println("locked") } çağrısını ekle. Mutex ve withLock içe aktarımını unutma.
Başlangıç kodu
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
// main'i runBlocking ile aç
// Mutex oluştur, withLock ile yazdırÖrnek çözüm
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
fun main() = runBlocking {
val m = Mutex()
m.withLock {
println("locked")
}
}Beklenen çıktı
locked
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Mutex'ın withLock metodu neyi sağlar?
- Birden çok coroutine eşzamanlı giriş
- Tek coroutine erişimi Doğru cevap
- Async çağrı
- Mutex gerektirmez
Açıklama: withLock tek coroutine erişimi sağlar.
2 withLock çağrısını tamamla
val m = Mutex()
m.____ { counter++ }
val m = Mutex()
m.withLock { counter++ }
Açıklama: withLock kilit alıp otomatik bırakır.
3 Mutex parçalarını eşle
| Kavram | Anlamı |
|---|---|
Mutex() |
Kilit nesnesi |
withLock { } |
Kilitli blok |
counter++ |
Korunan işlem |
otomatik bırakma |
Güvenlik |