Junior — Middle
Μπορούν διαφορετικά νήματα να αλληλεπιδρούν ταυτόχρονα με την ίδια διεύθυνση μνήμης;
sobes.tech AI
Απάντηση από AI
Ναι, σε Go, διαφορετικές goroutines (νήματα) μπορούν ταυτόχρονα να προσπελάζουν την ίδια διεύθυνση μνήμης. Ωστόσο, αυτό μπορεί να οδηγήσει σε συνθήκες αγώνα (race conditions) αν η πρόσβαση δεν είναι συγχρονισμένη. Για ασφαλή αλληλεπίδραση με την κοινόχρηστη μνήμη, χρησιμοποιούνται μηχανισμοί συγχρονισμού, όπως mutex (sync.Mutex), κανάλια (chan) ή ατομικές λειτουργίες από το πακέτο sync/atomic.
Παράδειγμα χρήσης mutex για την προστασία πρόσβασης σε μια κοινόχρηστη μεταβλητή:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
counter++
mu.Unlock()
}
Χωρίς αυτά τα μέτρα, η ταυτόχρονη πρόσβαση μπορεί να οδηγήσει σε απρόβλεπτη συμπεριφορά του προγράμματος.