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() // освобождава ресурса

По този начин семафорите помагат да се избегнат състезателни условия и осигуряват коректен достъп до споделените ресурси.