Sobes.tech
Junior — Middle

Χρησιμοποιήσατε κάποιο μηχανισμό συγχρονισμού με sync.Cond στα έργα σας;

sobes.tech AI

Απάντηση από AI

Σε έργα Go, έχω χρησιμοποιήσει το sync.Cond για την οργάνωση της αναμονής και της ειδοποίησης μεταξύ goroutines, όταν ήταν απαραίτητη η συνθήκη συγχρονισμού. Για παράδειγμα, όταν μια goroutine πρέπει να περιμένει μέχρι μια άλλη να εκτελέσει μια συγκεκριμένη ενέργεια ή να αλλάξει κατάσταση.

Παράδειγμα χρήσης του sync.Cond:

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	mu := sync.Mutex{}
	cond := sync.NewCond(&mu)
	ready := false

	go func() {
		time.Sleep(time.Second)
		mu.Lock()
		ready = true
		cond.Signal() // ειδοποιούμε την αναμένοντα goroutine
		mu.Unlock()
	}()

	mu.Lock()
	for !ready {
		cond.Wait() // περιμένουμε το σήμα
	}
	fmt.Println("Goroutine έτοιμη")
	mu.Unlock()
}

Αυτή η προσέγγιση είναι χρήσιμη όταν χρειάζεται πιο λεπτομερής έλεγχος της κατάστασης και του συγχρονισμού από απλώς τη χρήση καναλιών.