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