Sobes.tech
Middle

Qaydalara və semaforlara əsaslanan nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Paralel proqramlaşdırma kontekstində bariyerlər və semaforlar sinxronizasiya mexanizmlərinə əsaslanır:

  • Semaforlar: Atomik əməliyyatlara əsaslanır. Əsas əməliyyatlar:

    • wait (və ya P, salam): Sayğacı azaldır. Əgər sayğac mənfiyə düşərsə, axın bloklanır və başqa bir axın signal əməliyyatını yerinə yetirənə qədər gözləyir.
    • signal (və ya V, azad et): Sayğacı artırır. Əgər bloklanmış axınlar varsa, onlardan biri oyanır.
    • Semaforlar ikili (0 və ya 1 dəyərində, mutex kimi işləyir) və ya sayğaclı (məhdud sayda axın resursa çıxış edə bilər) ola bilər.
  • Barierlər: Bütün iştirakçıların gözlədiyi mexanizmə əsaslanır. Barierə çatmış axın bloklanır, bütün digər iştirakçılar da bu barierə çatdıqda, onlar eyni vaxtda davam edir.

iOS/macOS inkişafında, bu anlayışlar GCD (Grand Central Dispatch)OperationQueue kimi framework-lər vasitəsilə həyata keçirilir.

Məsələn, GCD-də:

// DispatchSemaphore istifadə nümunəsi
let semaphore = DispatchSemaphore(value: 1) // İkili semafor

// Wait (salam)
semaphore.wait()
// Kritik bölməyə giriş
semaphore.signal() // Signal (azad et)

GCD-də bariyerlər, paralel növbələr üçün bariyer tapşırıqları (barrier tasks) vasitəsilə həyata keçirilir:

let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)

// Adi tapşırıqlar
concurrentQueue.async {
    // ...
}

// Bariyer tapşırığı - yalnız əvvəlki bütün adi tapşırıqlar tamamlandıqda icra olunur
// Və bundan sonra, yeni tapşırıqlar başlamayacaq, qədər ki, bu tamamlanır
concurrentQueue.async(flags: .barrier) {
    // ...
}

// Adi tapşırıqlar, bariyer tapşırığı tamamlandıqdan sonra başlayacaq
concurrentQueue.async {
    // ...
}