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