Junior — Middle
Можете ли да обясните какво е семафор и как се използва за синхронизиране на процеси?
sobes.tech AI
Отговор от AI
Семафорът е механизъм за синхронизация, който се използва за управление на достъпа до споделен ресурс в среда с множество нишки или процеси. Той съдържа брояч, който показва колко нишки или процеси могат едновременно да получат достъп до ресурса.
Принцип на работа:
- Първоначално броячът на семафора се настройва на броя на наличните ресурси.
- Когато нишка иска да получи достъп, тя извиква операцията
wait(илиacquire), която намалява брояча. - Ако броячът стане по-малък от нула, нишката се блокира, очаквайки освобождаването на ресурса.
- Когато нишката освобождава ресурса, тя извиква
signal(илиrelease), който увеличава брояча и отключва чакащите нишки.
В iOS за работа със семафори често се използва класът DispatchSemaphore от GCD:
let semaphore = DispatchSemaphore(value: 1) // 1 означава, че ресурсът е достъпен за една нишка
// В нишката:
semaphore.wait() // чака, докато ресурсът стане достъпен
// Работа с ресурса
semaphore.signal() // освобождава ресурса
По този начин семафорите помагат да се избегнат състезателни условия и осигуряват коректен достъп до споделените ресурси.