Sobes.tech
Junior

Τι στο Go διασφαλίζει την ασφάλεια των νημάτων (thread safety);

sobes.tech AI

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

Η ασφάλεια σε παράλληλη εκτέλεση στο Go εξασφαλίζεται μέσω διαφόρων μηχανισμών:

  • Goroutines — ελαφριά νήματα που επιτρέπουν την παράλληλη εκτέλεση κώδικα.
  • Κάναλοι — το κύριο εργαλείο για ασφαλή ανταλλαγή δεδομένων μεταξύ goroutines χωρίς κοινές μεταβλητές.
  • Πακέτο sync — περιέχει primitive συγχρονισμού όπως Mutex για το κλείδωμα κρίσιμων τμημάτων, RWMutex για διαχωρισμό κλειδώματος ανάγνωσης και εγγραφής, και WaitGroup για αναμονή ολοκλήρωσης ομάδας goroutines.

Παράδειγμα χρήσης mutex για προστασία κοινόχρηστου πόρου:

import (
    "sync"
)

var mu sync.Mutex
var μετρητής int

func αύξηση() {
    mu.Lock()
    defer mu.Unlock()
    μετρητής++
}

Έτσι, η ασφάλεια σε παράλληλη εκτέλεση στο Go επιτυγχάνεται μέσω της σωστής χρήσης των goroutines, καναλιών και primitive συγχρονισμού από το πακέτο sync.