Junior — Middle
Оё шумо метавонед шарҳ диҳед, ки семафор чист ва чӣ гуна барои ҳамоҳангсозии равандҳо истифода мешавад?
sobes.tech AI
Ҷавоб аз AI
Семафор — механізм сінхранізацыі, які выкарыстоўваецца для кіравання доступам да агульнага рэсурсу ў асяроддзі з некалькімі патокамі або працэсамі. Ён змяшчае лічыльнік, які паказвае, колькі патокаў або працэсаў могуць адначасова атрымаць доступ да рэсурсу.
Прычына працы:
- Першапачаткова лічыльнік семафора ўсталёўваецца ў колькасць даступных рэсурсаў.
- Калі паток хоча атрымаць доступ, ён выклікае аперацыю
wait(ціacquire), якая змяншае лічыльнік. - Калі лічыльнік становіцца меншым за нуль, паток блакуецца, чакаючы вызвалення рэсурсу.
- Калі паток вызваляе рэсурс, ён выклікае
signal(ціrelease), які павышае лічыльнік і разблакоўвае чакаючыя патокі.
На iOS для працы з семафарамі часта выкарыстоўваецца клас DispatchSemaphore з GCD:
let semaphore = DispatchSemaphore(value: 1) // 1 азначае, што рэсурс даступны аднаму патоку
// У патоку:
semaphore.wait() // чакае, пакуль рэсурс стане даступным
// Праца з рэсурсам
semaphore.signal() // вызваляе рэсурс
Такім чынам, семафоры дапамагаюць пазбегнуць гонак і забяспечваюць карэктны доступ да дзеляных рэсурсаў.