Junior — Middle
შეგიძლიათ ახსნათ, რა არის სემაფორის მექანიზმი პროგრამირებაში და როგორ გამოიყენება ის თრედების სინქრონიზაციისთვის?
sobes.tech AI
პასუხი AI-სგან
Семафор — бұл синхрондау механизмі, ол шектеулі ресурска бірнеше ағынның қатынасын басқару үшін пайдаланылады.
Ол есептегішті қамтиды, ол бір уақытта қанша ағын ресурска қатынай алатынын көрсетеді. Ағын сынық бөлімге кіруді қаласа, ол "wait" (немесе P) операциясын орындайды және есептегішті азайтады. Егер есептегіш теріс мәнге айналса, ағын блокталады. Ағын сынық бөлімнен шыққанда, ол "signal" (немесе V) операциясын орындайды және есептегішті арттырады, күтіп тұрған ағындарды босатады.
POSIX API көмегімен C++-да семафорды пайдалану мысалы:
#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;
}
Осылайша, семафор бір уақытта жұмыс істеп жатқан ағындар санын шектейді, жарыс жағдайларын болдырмайды және дұрыстығын қамтамасыз етеді.