Junior — Middle
Можете ли објаснити принцип функционисања семафора у мултипоточном програмирању?
sobes.tech АИ
Одговор од АИ
Semafor je mehanizam za sinhronizaciju u višestrukom programiranju koji kontroliše pristup zajedničkom resursu. Sadrži brojač koji pokazuje koliko niti može istovremeno da pristupi resursu.
Princip rada:
- Na početku, brojač semafora se postavlja na broj jednak dostupnim resursima.
- Kada nit želi da pristupi, poziva operaciju "wait" (ili "acquire"), koja smanjuje brojač za 1.
- Ako brojač postane manji od nule, nit se blokira i čeka dok druga nit ne oslobodi resurs.
- Kada nit oslobodi resurs, poziva operaciju "signal" (ili "release"), koja povećava brojač za 1 i otključava čekajuće niti.
Primer u Swift-u sa DispatchSemaphore:
let semaphore = DispatchSemaphore(value: 2) // dozvoljava istovremeni rad 2 niti
DispatchQueue.global().async {
semaphore.wait() // pokušaj pristupa
print("Nit je počela sa radom")
sleep(2) // simulacija rada
print("Nit je završila sa radom")
semaphore.signal() // oslobađanje resursa
}
Na ovaj način, semafor pomaže da se ograniči broj niti koje istovremeno rade sa zajedničkim resursom, sprečavajući trke i obezbeđujući integritet podataka.