Sobes.tech
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.