Junior — Middle
Ar galima vienu metu vienoje funkcijoje naudoti kelis blokavimo mechanizmus (Mutex)?
sobes.tech AI
Atsakymas iš AI
Taip, Go kalboje galima naudoti kelis mutexus (Mutex) vienu metu toje pačioje funkcijoje. Tai dažnai pasitaiko, kai reikia apsaugoti skirtingus išteklius ar duomenų dalis, kurios nėra susijusios tarpusavyje. Svarbiausia – išvengti tarpusavio blokavimų (deadlock), kai vienas mutex laukia kito atlaisvinimo, o tas kitas – pirmojo.
Pavyzdys, kaip naudoti kelis mutexus:
var mu1 sync.Mutex
var mu2 sync.Mutex
func updateResources() {
mu1.Lock()
defer mu1.Unlock()
// Darbas su pirmu ištekliu
mu2.Lock()
defer mu2.Unlock()
// Darbas su antru ištekliu
}
Kad išvengtumėte deadlock, rekomenduojama visada užrakinti mutexus toje pačioje tvarkoje visose kodo vietose.