CodeBlanks Logo Icon CodeBlanks

Semaphore

Semaphore ile sayılı erişim öğrenirsin.

Semaphore ile sınırlandırma

Semaphore, aynı anda sınırlı sayıda coroutine'e izin verir. withPermit { } ile bir permit alınır; blok bitince permit iade edilir.

Örnek: val s = Semaphore(3); s.withPermit { fetch() }. En fazla 3 coroutine aynı anda fetch'i çağırabilir; diğerleri bekler. Mutex bir Semaphore(1) olarak düşünülebilir. Bu kalıp, dış kaynakları aşırı yüklememek için kullanılır.

Permit sayısı ve bekleme

Semaphore(n) ile n permit ayarlanır. Her withPermit bir permit alır; hepsi doluysa coroutine bekler. Bir permit bırakıldığında sıradaki devam eder.

Örnek: Semaphore(2). Üç coroutine withPermit çağırırsa ikisi paralel çalışır, üçüncüsü biri bitene dek bekler. Bu kalıp, paralelliği kontrol altında tutar; sistem kaynaklarını korur.

Uygulama Semaphore ile permit bloğu

main fonksiyonunu runBlocking ile aç. val s = Semaphore(2) oluştur ve s.withPermit { println("permit") } çağrısını ekle. Gerekli içe aktarımları yap.

Başlangıç kodu

Main.kt
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.sync.withPermit

// main'i runBlocking ile aç
// iki permitli Semaphore oluştur, withPermit ile yazdır

Örnek çözüm

Main.kt
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.sync.withPermit

fun main() = runBlocking {
    val s = Semaphore(2)
    s.withPermit {
        println("permit")
    }
}

Beklenen çıktı

permit

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 withPermit çağrısını tamamla

Soru
val s = Semaphore(3)
s.____ { fetch() }
Cevap
val s = Semaphore(3)
s.withPermit { fetch() }

Açıklama: withPermit bir permit alır ve iade eder.

2 Semaphore(1) ile Mutex arasındaki ilişki nedir?

Main.kt
Semaphore(1) is like Mutex.
  • İkisi farklı iş yapar
  • Mutex Semaphore(0)'dır
  • Semaphore(1) Mutex gibi davranır Doğru cevap
  • İlişkileri yoktur

Açıklama: Semaphore(1) tek permitli Mutex gibi davranır.

3 Semaphore parçalarını eşle

Kavram Anlamı
Semaphore(3) Permit sayısı
withPermit { } Permitli blok
fetch() Sınırlı işlem
permit iadesi Güvenlik

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