Çok iş parçacığı bağlamında senkronizasyon ne yapar?
sobes.tech yapay zeka
AI'dan gelen yanıt
Çok iş parçacıklı bağlamda senkronizasyon, yarış durumu (race condition) önler ve farklı iş parçacıklarından ortak kaynaklara (değişkenler, dosyalar, ağ bağlantıları) tutarlı erişim sağlar.
Ana senkronizasyon mekanizmaları:
- Mutex (karşılıklı dışlama): Sadece bir iş parçacığı mutex'i kullanabilir ve korunan kaynağa erişebilir.
- Semaphore (semafor): Aynı anda bir kaynağa erişebilecek iş parçacığı sayısını sınırlar. Sayaç ile çalışır.
- Lock (kilit): Genel bir kavramdır, genellikle mutex veya erişimi tamamen engelleyen diğer mekanizmaları ifade etmek için kullanılır.
- Dispatch Queue (görev kuyruğu): Grand Central Dispatch (GCD) içinde, kuyruklar sıralı (seri) veya eşzamanlı (eş zamanlı) olabilir, görevlerin sırasını ve aynı anda çalışan görevlerin sayısını kontrol ederek senkronizasyon sağlar. Sıralı kuyruklar, görevlerin sırayla yürütülmesini garantiler ve bu, yalnızca bu kuyruğun görevlerinden erişilen verilere doğal olarak senkronizasyon sağlar.
Çalışma prensibi: Ortak kaynağa erişmek isteyen bir iş parçacığı önce kilit (lock) almaya çalışır. Kaynak boşsa, iş parçacığı kilidi alır ve kaynağa çalışır. İş tamamlandığında, kilidi serbest bırakır (release lock). Kaynak kullanımdaysa, diğer iş parçacıkları kilitlenir (bekler) ve kaynak serbest kalana kadar bekler.
Kritik bölgeyi korumak için mutex kullanımına örnek:
// Objective-C'de @synchronized kullanımıyla örnek
- (void)updateSharedResource {
@synchronized (self) { // self nesnesi üzerinde kilit
// Burada kritik bölge çalıştırılır
// sharedResource güvenli hale gelir
self.sharedResource++;
} // Kilit, bloktan çıkınca otomatik olarak serbest bırakılır
}
// Swift'te NSLock kullanımıyla örnek
let lock = NSLock()
var sharedCounter = 0
func incrementCounter() {
lock.lock() // Kilidi almaya çalışır
// Kritik bölge
sharedCounter += 1
lock.unlock() // Kilidi serbest bırakır
}
Senkronizasyon, şu sorunların önlenmesine yardımcı olur:
- Veri bozulması.
- Deadlock (iş parçacıklarının karşılıklı kilitlenmesi).
- Livelock (aktif kilitlenmeler).
Uygun senkronizasyon mekanizmasının seçimi, görevin doğasına ve kaynağın türüne bağlıdır.