【发布时间】:2012-03-24 18:45:13
【问题描述】:
所以,我正在我的一个课程中使用调度程序。基本上,我们假设一次只能执行一个线程。我们应该使用一个信号量类来让这些线程自己阻塞来模拟等待CPU的线程。
问题是,线程似乎在错误的时间阻塞并在错误的时间执行。我想知道我是否缺少对信号量的一些概念性理解以及如何实现它。我想知道是否可以就我的实施获得一些反馈。导师提供了这个头文件,我没有以任何方式修改过:
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);
}
}
【问题讨论】: