Go

Prymitywy synchronizacji

sync.Mutex, RWMutex, Once, Pool, Map, Cond, operacje atomowe

22 pytań z rozmów·
Mid-Level
1

Czym jest sync.Mutex w Go?

Odpowiedź

sync.Mutex (mutual exclusion lock) to prymityw synchronizacji, który zapewnia, że tylko jedna goroutine może uzyskać dostęp do sekcji krytycznej naraz. Wywołanie Lock blokuje, dopóki mutex nie będzie dostępny, a Unlock zwalnia go dla innych goroutine. Używaj go do ochrony współbieżnego dostępu do współdzielonych danych.

2

Co się stanie, jeśli zapomnimy wywołać Unlock po Lock na sync.Mutex?

Odpowiedź

Pominięcie Unlock tworzy potencjalny deadlock, ponieważ inne goroutine będą czekać w nieskończoność na zdobycie muteksu. Najlepszą praktyką jest użycie defer, aby zapewnić wywołanie Unlock nawet w przypadku panic. Zawsze paruj Lock i Unlock w tym samym zakresie, aby uniknąć wycieków blokad.

3

Jaka jest główna różnica między sync.Mutex a sync.RWMutex?

Odpowiedź

sync.RWMutex pozwala na wiele równoczesnych odczytów przez RLock, ale tylko jeden wyłączny zapis przez Lock. Poprawia to wydajność w scenariuszach z dużą liczbą odczytów, ponieważ czytelnicy nie blokują się nawzajem. Używaj RWMutex, gdy odczyty są częste, a zapisy rzadkie.

4

Dlaczego używać defer z Unlock na sync.Mutex?

5

Kiedy preferować sync.RWMutex zamiast sync.Mutex?

+19 pytań z rozmów

Opanuj Go na następną rozmowę

Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.

Zacznij za darmo