Junior — Middle
Какви техники за използване на блокировки или други механизми за предотвратяване на едновременен достъп до данните познаваш?
sobes.tech AI
Отговор от AI
Основните техники за предотвратяване на едновременен достъп до данни в Go:
- Mutex (sync.Mutex): блокиране на критичната секция, така че само един поток да работи с данните.
var mu sync.Mutex
mu.Lock()
// работа с общи данни
mu.Unlock()
-
RWMutex (sync.RWMutex): позволява на няколко читатели да четат данните едновременно, но блокира писането.
-
Канали (channels): предаване на данни между goroutine, което избягва директен достъп до общите данни.
-
Атомарни операции (sync/atomic): за прости операции с променливи без пълно блокиране.
-
sync.Once: за еднократно инициализиране на данни.
Изборът на механизъм зависи от задачата: за простото взаимно изключване — Mutex, за разделяне на четене и писане — RWMutex, за предаване на съобщения — канали.