Junior — Middle
Milyen technikákat ismersz a zárolások vagy más mechanizmusok használatára az adatok egyidejű hozzáférésének megakadályozására?
sobes.tech MI
Válasz az MI-től
A Go-ban az adatok egyidejű hozzáférésének megelőzésére szolgáló fő technikák:
- Mutex (sync.Mutex): a kritikus szekció zárolása, hogy csak egy szál dolgozhasson az adatokkal.
var mu sync.Mutex
mu.Lock()
// közös adatokkal való munka
mu.Unlock()
-
RWMutex (sync.RWMutex): lehetővé teszi több olvasónak, hogy egyszerre olvassák az adatokat, de blokkolja az írást.
-
Csatornák (channels): adatok átadása goroutine-ok között, így elkerülve a közös adatok közvetlen hozzáférését.
-
Atomi műveletek (sync/atomic): egyszerű műveletek változókkal teljes zárolás nélkül.
-
sync.Once: az adatok egyszeri inicializálására.
A mechanizmus kiválasztása a feladattól függ: egyszerű kölcsönös kizárás — Mutex, olvasás és írás szétválasztása — RWMutex, üzenetküldés — csatornák.