2016-04-16 8 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); 
    } 
} 

アイテムを作成/使用するたびに番号を印刷するメインを実装する方法を考えるのは苦労しています。

すべてのヘルプは、私がenter_itemremove_itemを呼び出した後、メッセージを印刷示唆

+1

コードをインデントしてください – user8

+0

いくつかのプロデューサスレッドを起動してください(何らかのポインタの待ち行列/何でもスリープコールをループするかもしれません) 。 –

答えて

0

をいただければ幸いです。この問題は、スレッドを使用して解決するのが一番良いですが、実装するには(xがいっぱいになるまで)x個のアイテムを作成し、消費者に消費させてください。

+0

それでは、enter_itemとremove_itemの後にprintf文を挿入するのは単なるケースですか?だから: – JacobSmith1996

+0

印刷部分については、私はそう思う。入力/削除した番号を取得し、 "Item" x "のような適切なメッセージを出力し、' N'から生成された 'N'または' 'x'アイテムのスタックに追加します。 – Segmentation

+0

生産者/消費者問題の1つのポイントは、バッファがいっぱいで、消費者が商品を追加しない場合、生産者が商品を追加しないようにすることですそれが空であればそれからデータを削除しようとします。そのことを考えて、良いか悪いかのいくつかの可能な結果を​​カバーする例を作ってください。 – Segmentation