Я пытаюсь реализовать модель производитель-потребитель, и у меня возникли некоторые проблемы с ней. Считайте код
int number=0;
void* master(void* p){
int i;
pthread_t workers[5];
for(i=0;i<5;i++)
pthread_create(&workers[i],NULL,worker,NULL);
while(1){
//possible delay
pthread_mutex_lock(&mutex);
if(number == LIMIT)
pthread_cond_wait(¬_full,&mutex);
number++;
pthread_cond_signal(¬_empty);
pthread_mutex_unlock(&mutex);
}
}
void* worker(void* p){
while(1){
pthread_mutex_lock(&mutex);
if(number == 0)
pthread_cond_wait(¬_empty,&mutex);
number--;
pthread_cond_signal(¬_full);
pthread_mutex_unlock(&mutex);
//possible delay
}
}
Может быть, это очевидно для вас, но я не могу понять, как возможно, что переменная номер становится отрицательной, что, конечно, позволяет рабочему потоку уменьшать его дальше. Что я делаю не так?
- EDIT -
Хорошо, один прогресс выполняется в то время как (число == 0) вместо if, но я до сих пор не понимаю, как могло получиться, что два потока могут уменьшить переменную после получения сигнала not_empty, пока он меньше двух .