Итак, я работаю над планировщиком в одном из моих классов. В принципе, мы притворяемся, что за один раз может выполняться только один поток. Мы должны использовать класс семафора, чтобы позволить этим потокам блокировать себя, чтобы имитировать поток, ожидающий CPU.Реализация двоичного класса семафора в C++
Проблема в том, что потоки, похоже, блокируются в неподходящее время и выполняются в неподходящее время. Мне было интересно, не хватает ли я концептуального понимания семафора и как его реализовать. Мне было интересно, могу ли я получить некоторые отзывы о моей реализации. Инструктор при условии, этот файл заголовка, который я не модифицированное каким-либо образом:
class Semaphore {
private:
int value;
pthread_mutex_t m;
pthread_cond_t c;
public:
/* -- CONSTRUCTOR/DESTRUCTOR */
Semaphore(int _val);
//~Semaphore();
/* -- SEMAPHORE OPERATIONS */
int P();
int V();
};
Это моя реализация с помощью Posix материал:
Semaphore::Semaphore(int _val){
value = _val;
c = PTHREAD_COND_INITIALIZER;
m = PTHREAD_MUTEX_INITIALIZER;
}
int Semaphore::P(){
if(value <= 0){
pthread_cond_wait(&c, &m);
}
value--;
}
int Semaphore::V(){
value++;
if(value > 0){
pthread_cond_signal(&c);
}
}
«Инструктор предоставил этот файл заголовка, который я никоим образом не модифицировал». – mfontanini
Это может быть так, но из-за этого мне не нужно изменять мой ответ. Дело в том, что здесь у вас нет двоичного семафора, и я правильно указывал на это. Возможно, задача состоит в том, чтобы реализовать его как двоичный семафор без изменения заголовка; это можно сделать. – Kaz
О'кей, ты там. – mfontanini