Sobes.tech
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()
}

Χωρίς αυτά τα μέτρα, η ταυτόχρονη πρόσβαση μπορεί να οδηγήσει σε απρόβλεπτη συμπεριφορά του προγράμματος.