Junior — Middle
El tudná magyarázni a mutex működési elvét és használatát több szálas programokban?
sobes.tech MI
Válasz az MI-től
A kölcsönös kizárás (Mutex) egy szinkronizációs mechanizmus, amelyet több szál egyidejű hozzáférésének megakadályozására használnak egy közös erőforráshoz (például egy változóhoz vagy fájlhoz). A Mutex garantálja, hogy minden pillanatban csak egy szál birtokolhatja a zárolást és hajthatja végre a kritikus szekciót.
Működési elv:
- A szál megpróbálja megszerezni a mutexet, mielőtt belépne a kritikus szekcióba.
- Ha a mutex szabad, a szál hozzáférést kap és folytatja.
- Ha a mutex más szál által foglalt, a jelenlegi szál blokkolva lesz, és várja, hogy felszabaduljon.
- A forrás használata után a szál felszabadítja a mutexet, lehetővé téve más szálak számára a folytatást.
Go nyelven ez a sync.Mutex típuson keresztül valósul meg:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock() // mutex zárolása
counter++ // kritikus szekció
mu.Unlock() // mutex feloldása
}
A mutex használata megelőzi a versenyhelyzeteket, és biztosítja az adatok helyességét párhuzamos végrehajtás során.