Sobes.tech
Junior — Middle

Şə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.