Я использую библиотеку pthread для имитации многопоточного буфера.Я также использую семафоры в качестве решения для доступа к переменным критической секции по одной.
Основная проблема заключается в том, что производитель заполняет весь буфер, а потребитель затем очищает весь буфер.Этот код правильный?Я предполагал, что производство и потребление произойдут до того, как буфер будет заполнен или пуст.
Вот мой код, и любые комментарии очень помогут, и да, это для класса.
Заранее спасибо
void *Producer(void *threadid)
{
long tid;
tid = (long)threadid;
while (c < Cycles) //While stuff to buffer
{
pthread_mutex_lock(&lock);
while(size == BUFFER_SIZE)
{
pthread_cond_wait(&cond, &lock);
}
buffer [full] = rand();
data << size+1 << ". Produce: " << buffer[full] << endl;
printBuffer();
full = (full + 1) % BUFFER_SIZE;
size++;
pthread_cond_signal(&cond1);
pthread_mutex_unlock(&lock);
c++;
}
pthread_exit(NULL);
}
Вы также можете скачать весь код или просмотреть файл журнала ...
загрузить main.cpp просмотреть файл журнала на funkohland.com / Pthreads / log.txt