所以,我正在使用我的一个类中的调度器。基本上,我们假装一次只能执行一个线程。我们应该使用信号类来允许这些线程阻塞自己以模拟等待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 2012-03-24 19:26:42
这可能是这样,但没有必要因此而拒绝我的回答。事实是,你在这里没有二进制信号量,我正确地指出了这一点。也许任务是在不改变头部的情况下将其实现为二进制信号量;这可以做到。 – Kaz 2012-03-24 19:54:15
好的,你走了。 – mfontanini 2012-03-24 20:03:32