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()
}
Αυτή η προσέγγιση είναι χρήσιμη όταν χρειάζεται πιο λεπτομερής έλεγχος της κατάστασης και του συγχρονισμού από απλώς τη χρήση καναλιών.