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.