Şərtli dəyişənin nə olduğunu və onun iş parçalarını sinxronlaşdırmaq üçün necə istifadə olunduğunu izah edin.
sobes.tech Süni İntellekt
AI-dan cavab
Şərt dəyişəni (condition variable) iş parçacqlarının müəyyən bir şərtin baş verməsini gözləməsinə imkan verən sinxronizasiya mexanizmidir və digər iş parçacığı onların vəziyyətindəki dəyişiklik barədə xəbərdar edir.
Go-da şərt dəyişənləri sync.Cond tipi vasitəsilə həyata keçirilir. Bu, paylaşılan məlumatları qoruyan sync.Mutex ilə birlikdə işləyir. Gözləyən iş parçacığı Wait() çağırır, bu da mutex-i azad edir və başqa bir iş parçacığı Signal() (bir iş parçacığını oyatmaq üçün) və ya Broadcast() (bütün gözləyənləri oyatmaq üçün) çağırana qədər bloklanır.
İstifadə nümunəsi:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Gözləyən iş parçacığı
mu.Lock()
for !sharedDataReady {
cond.Wait() // mu-ni azad edir və siqnalı gözləyir
}
// Burada sharedDataReady == true
mu.Unlock()
// Vəziyyəti dəyişən iş parçacığı
mu.Lock()
sharedDataReady = true
cond.Signal() // və ya cond.Broadcast(), gözləyənləri oyatmaq üçün
mu.Unlock()
Beləliklə, şərt dəyişəni iş parçacqları arasında düzgün gözləmə və bildiriş təşkil etməyə kömək edir, aktiv sorğulama və yarış şərtlərindən qaçınır.