Sobes.tech
Junior — Middle

Tudná magyarázni, hogy mi az a szemafor a programozás és a szálak szinkronizálásának kontextusában?

sobes.tech MI

Válasz az MI-től

A szignálsorompó egy szinkronizációs mechanizmus, amelyet több szál hozzáférésének szabályozására használnak egy közös erőforráshoz.

Tartalmaz egy számlálót, amely megmutatja, hány szál férhet hozzá egyidejűleg az erőforráshoz. Amikor egy szál be akar lépni a kritikus szekcióba, megpróbálja "elfogni" a szignálsorompót:

  • Ha a számláló nagyobb nullánál, akkor egyel csökken, és a szál folytatódik.
  • Ha a számláló nulla, a szál blokkolódik, és vár, amíg egy másik szál felszabadítja a szignálsorompót.

Amikor egy szál befejezi az erőforrás használatát, felszabadítja a szignálsorompót, növelve a számlálót, lehetővé téve más szálak számára a folytatást.

Swift (iOS) példakód a szignálsorompó használatára:

let semaphore = DispatchSemaphore(value: 2) // engedélyezi, hogy 2 szál egyidejűleg fusson

DispatchQueue.global().async {
    semaphore.wait() // megpróbálja elfogni a szignálsorompót
    print("Szál elkezdett dolgozni")
    sleep(2) // munka szimuláció
    print("Szál befejezte a munkát")
    semaphore.signal() // felszabadítja a szignálsorompót
}

Így a szignálsorompó segít szabályozni, hogy hány szál dolgozik egyszerre egy közös erőforráson, megelőzve a versenyhelyzeteket és biztosítva a helyes működést.