Sobes.tech
Junior — Middle

Оё шумо метавонед шарҳ диҳед, ки семафор чист ва чӣ гуна барои ҳамоҳангсозии равандҳо истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Семафор — механізм сінхранізацыі, які выкарыстоўваецца для кіравання доступам да агульнага рэсурсу ў асяроддзі з некалькімі патокамі або працэсамі. Ён змяшчае лічыльнік, які паказвае, колькі патокаў або працэсаў могуць адначасова атрымаць доступ да рэсурсу.

Прычына працы:

  • Першапачаткова лічыльнік семафора ўсталёўваецца ў колькасць даступных рэсурсаў.
  • Калі паток хоча атрымаць доступ, ён выклікае аперацыю wait (ці acquire), якая змяншае лічыльнік.
  • Калі лічыльнік становіцца меншым за нуль, паток блакуецца, чакаючы вызвалення рэсурсу.
  • Калі паток вызваляе рэсурс, ён выклікае signal (ці release), які павышае лічыльнік і разблакоўвае чакаючыя патокі.

На iOS для працы з семафарамі часта выкарыстоўваецца клас DispatchSemaphore з GCD:

let semaphore = DispatchSemaphore(value: 1) // 1 азначае, што рэсурс даступны аднаму патоку

// У патоку:
semaphore.wait()   // чакае, пакуль рэсурс стане даступным
// Праца з рэсурсам
semaphore.signal() // вызваляе рэсурс

Такім чынам, семафоры дапамагаюць пазбегнуць гонак і забяспечваюць карэктны доступ да дзеляных рэсурсаў.