Koşullu değişkenin ne olduğunu ve iş parçacıklarının senkronizasyonu için nasıl kullanıldığını açıklayın.
sobes.tech yapay zeka
AI'dan gelen yanıt
Koşul değişkeni (condition variable), bir veya daha fazla iş parçacığının belirli bir koşul gerçekleşene kadar beklemesine olanak tanıyan bir eşzamanlama mekanizmasıdır; diğer yandan, başka bir iş parçacığı durumu değiştirdiğinde onları bilgilendirir.
Go dilinde, koşul değişkenleri sync.Cond tipi aracılığıyla uygulanır. Bu, paylaşılan verileri koruyan bir mutex (sync.Mutex) ile birlikte çalışır. Beklemek isteyen iş parçacığı Wait() çağırır, bu da mutex'i serbest bırakır ve başka bir iş parçacığı Signal() (bir iş parçacığını uyandırmak için) veya Broadcast() (tüm bekleyenleri uyandırmak için) çağırana kadar engellenir.
Kullanım örneği:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Bekleyen iş parçacığı
mu.Lock()
for !sharedDataReady {
cond.Wait() // mu'yu serbest bırakır ve sinyal bekler
}
// Burada sharedDataReady == true
mu.Unlock()
// Durumu değiştiren iş parçacığı
mu.Lock()
sharedDataReady = true
cond.Signal() // veya cond.Broadcast(), bekleyenleri uyandırmak için
mu.Unlock()
Bu şekilde, koşul değişkeni, iş parçacıkları arasında doğru bekleme ve bildirim organizasyonunu sağlar, aktif tarama ve yarış koşullarını önler.