Junior — Middle
Можете ли да обясните какво представлява механизмът на семафора в програмирането и как се използва за синхронизиране на нишки?
sobes.tech AI
Отговор от AI
Семафорът е механизъм за синхронизация, който се използва за управление на достъпа на множество нишки до ограничен ресурс.
Той съдържа брояч, който показва колко нишки могат да получат достъп до ресурса едновременно. Когато нишка иска да влезе в критичната секция, изпълнява операцията "wait" (или P), намалявайки брояча. Ако броячът стане отрицателен, нишката се блокира. Когато нишката излезе от критичната секция, изпълнява операцията "signal" (или V), увеличавайки брояча и отключвайки чакащите нишки.
Пример за използване на семафор в C++ с POSIX API:
#include <semaphore.h>
#include <pthread.h>
#include <iostream>
sem_t semaphore;
void* worker(void* arg) {
sem_wait(&semaphore); // вземане на ресурса
std::cout << "Нишката работи\n";
// работа с ресурса
sem_post(&semaphore); // освобождаване на ресурса
return nullptr;
}
int main() {
sem_init(&semaphore, 0, 3); // разрешаваме едновременно 3 нишки
pthread_t threads[5];
for (int i = 0; i < 5; ++i) {
pthread_create(&threads[i], nullptr, worker, nullptr);
}
for (int i = 0; i < 5; ++i) {
pthread_join(threads[i], nullptr);
}
sem_destroy(&semaphore);
return 0;
}
По този начин семафорът ограничава броя на нишките, които работят едновременно с ресурса, предотвратява състезателни условия и осигурява коректност.