Код производителя-потребителя, использующий семафор, но не работающий - PullRequest
0 голосов
/ 16 ноября 2018

Я нахожусь в очень затруднительном положении, так как я не могу выяснить проблему с проблемой моего производителя-потребителя, используя pthreads. код компилируется, но когда я запускаю код, ничего не происходит, и ожидаемый вывод не отображается. я полагаю, что в моих ветках производителей и потребителей есть проблема с оператором if / else, но я могу быть чем-то другим. код показан ниже:

Чтобы скомпилировать его в командной строке:

gcc -pthread -lrt semaphore.c -o semaphore  

Как только вы запустите программу, она отобразит правильный вывод

1 Ответ

0 голосов
/ 16 ноября 2018

Вы можете рассмотреть некоторые примеры выходных данных, чтобы пойти с ним;но я заметил, что потоки вашего производителя и потребителя начинаются с:

int rNum = rand() / RAND_DIVISOR;
sleep(rNum);

Простое удаление этого из обоих потоков заставило вашу программу работать.В моем выпуске linux значение RAND_MAX равно 2 ^ 31, поэтому в каждом потоке это может вызвать до 21 секунды сна.

...