2016-04-16 2 views
-3

Я реализую решение проблемы потребителей-производителя с помощью семафоров и до сих пор разработал этот код, который реализован производителем и потребителем.Производитель/Потребительское решение

#define N 100    
typedef int semaphore; 
semaphore mutex = 1; 
semaphore empty = N; 
semaphore full = 0; 
void producer(void) 
{ 
    int item; 
    while (TRUE) 
    { 
     produce_item(&item); 
     down(&empty); 
     down(&mutex); 
     enter_item(item); 
     up(&mutex); 
     up(&full); 
    } 
} 
void consumer(void) 
{ 
    int item; 
    while (TRUE) 
    { 
     down(&full); 
     down(&mutex); 
     remove_item(&item); 
     up(&mutex); 
     up(&empty); 
     consume_item(item); 
    } 
} 

Я изо всех сил думать о том, как реализовать основной, который печатает номер каждый раз, когда элемент производимыми /.

Любая помощь будет оценена

+1

Откажитесь от своего кода – user8

+0

Запустите некоторые потоки производителей (возможно, обоймитесь нажатием кнопки на каком-то указателе/​​другом и вызове сна), и некоторые потоки потребителей (возможно, обойти очередь поп и printf, полученный указатель/независимо) , –

ответ

0

Я предлагаю печатать сообщения после вызова enter_item и remove_item. Эта проблема лучше всего решается с помощью потоков, но для вашей реализации старайтесь создавать «х» количество элементов (до полного заполнения), а затем пусть потребитель их потребляет.

+0

Так это просто случай вставки инструкции printf после enter_item и remove_item? Итак: – JacobSmith1996

+0

Хорошо для печатной части, я думаю, да. Вы получаете номер, который вы ввели/удалили, и распечатайте его с помощью подходящего сообщения типа «x», которое будет добавлено в стек элементов «N» или «x», созданных из «N». для удаленных элементов. – Segmentation

+0

Хотя, что касается основной части, подумайте об этом. Одна из проблем производителя/потребителя - убедиться, что производитель не добавит элемент, если буфер заполнен, и что потребитель не будет попробуйте удалить данные из него, если он пуст. Думая об этом, делайте примеры для покрытия некоторых возможных результатов, хороших или плохих. – Segmentation