Junior — Middle
131
Proqramlaşdırmada semafor mexanizminin nə olduğunu və onun iş parçalarını sinxronizasiya etmək üçün necə istifadə olunduğunu izah edə bilərsinizmi?
AI-dan cavab
sobes.tech Süni İntellekt
Семафор — это механизм синхронизации, который используется для управления доступом нескольких потоков к ограниченному ресурсу.
Он содержит счётчик, который показывает, сколько потоков могут одновременно получить доступ к ресурсу. Когда поток хочет войти в критическую секцию, он выполняет операцию "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;
}
Таким образом, семафор позволяет ограничить число потоков, одновременно работающих с ресурсом, предотвращая гонки и обеспечивая корректность.