CodeBlanks Logo Icon CodeBlanks

Mutex

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

Main.kt
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

Main.kt
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

Soru
val m = Mutex()
m.____ { counter++ }
Cevap
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

İleri seviye bölümündeki tüm dersler