私はプロデューサーとコンシューマーの問題に取り組んでいます。私は、束縛されたバッファに物を入れ、複数の消費者を使ってバッファからデータを取得するために、1つのプロデューサを作成しました。すべての消費者が働いているかどうかを確認するために、私はそれぞれの人にIDを与え、それを印刷させます。C pthread:複数のスレッドがありますが、1つのスレッドのみが使用されます
以下は、複数のコンシューマを作成するためのコードです。私はのように見えるかもしれ期待何
#define CONSUMER_NUM 5;
pthread_t consumer[CONSUMER_NUM];
for(i=0;i<CONSUMER_NUM;i++){
int t = i;
pthread_create(&consumer[i],NULL,fun_consumer,(void*)&t);
} // pass i to the function fun_consumer to be an id of the thread
:
Consumer 1
Consumer 2
Consumer 3
Consumer 4
Consumer 5
は、私は、出力は通常、スレッドのランダム実行にこの原因のように見えないであろうことを理解しています。私がここで期待したのは、消費者のほとんどが仕事に就くということです。しかし、真実はこのように印刷されたプログラムです:
Consumer 5
Consumer 5
Consumer 5
Consumer 5
Consumer 5
ここでは消費者は1つだけです。私は "スリープ"を試みましたが、それは私に期待した出力を与えることができますが、実行が遅くなりました。私はこの問題を解決するためのより良い方法があるかどうか疑問に思っていますか?
感謝を!私は最初の方法を試してコードを変更しましたが(上記のように私はそれを編集しましたが)、それでもすべてが5で出力されます... –
@IvyLin、あなたは私が言ったことを理解できませんでした。変更を続ける変数のアドレスを提供しています。コードで私の更新答えをご覧ください。 – SergeyA
私は見る!あなたの忍耐をありがとう、それは今動作します:) @ SergeyA –