Sobes.tech
Middle+

Ποια primitives συγχρονισμού goroutine υπάρχουν στο Go;

sobes.tech AI

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

Στη γλώσσα Go, τα βασικά primitive που χρησιμοποιούνται για τον συγχρονισμό των goroutines είναι:

  • Mutex (sync.Mutex) — διασφαλίζει την αμοιβαία αποκλεισμό, μπλοκάροντας την πρόσβαση σε κοινόχρηστους πόρους.
  • RWMutex (sync.RWMutex) — επέκταση του Mutex που επιτρέπει σε πολλές goroutines να διαβάζουν ταυτόχρονα, αλλά μπλοκάρει την εγγραφή.
  • WaitGroup (sync.WaitGroup) — επιτρέπει την αναμονή για την ολοκλήρωση μιας ομάδας goroutines.
  • Channel (chan) — κανάλι για τη μεταφορά δεδομένων μεταξύ goroutines, παρέχει συγχρονισμό μέσω αποστολής μηνυμάτων.
  • Once (sync.Once) — διασφαλίζει ότι μια συγκεκριμένη λειτουργία θα εκτελεστεί μόνο μία φορά.
  • Cond (sync.Cond) — μεταβλητή συνθήκης για πιο πολύπλοκο συγχρονισμό, π.χ. αναμονή για μια συγκεκριμένη κατάσταση.

Παράδειγμα χρήσης του WaitGroup και Mutex:

var mu sync.Mutex
var wg sync.WaitGroup
var counter int

func increment() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}

func main() {
    wg.Add(3)
    go increment()
    go increment()
    go increment()
    wg.Wait()
    fmt.Println("Μετρητής:", counter)
}