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ə yaP,salam): Sayğacı azaldır. Əgər sayğac mənfiyə düşərsə, axın bloklanır və başqa bir axınsignaləməliyyatını yerinə yetirənə qədər gözləyir.signal(və yaV,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) və 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 {
// ...
}