0

pthread lock を関数に渡しても大丈夫ですか? 私がこれを求めている理由は、コンシューマーとして機能する多数のスレッド (10 としましょう) と 2 つのプロデューサーがあり、各コンシューマー スレッドには独自のリンク リスト (バッファー) があり、プロデューサーはこれらのいずれかにデータを送信するためです。スレッドは特定のルールに基づいてスレッド化されるため、プロデューサ 1 がコンシューマ 1 に送信し、次にコンシューマ 2 に送信してから、コンシューマ 1 に戻すというように送信することがあります。

そこで考えているのが、

プロデューサー 1 がコンシューマー 5 に送信したい場合、

  1. Producer 1 は関数 linked-list を呼び出してデータ (IPC) を共有し、lock[5] をこの関数に渡します。この場合は lock 5 になります。
  2. 関数 linked-list は lock[5] をロックし、linked-list を更新します
  3. コンシューマ 5 がリンクされた関数関数を呼び出すと、ロックが渡され (コンシューマ 5 は常に lock[5] を使用します)、プロデューサがすでにこのロックをロックしている場合は待機します。

lock の名前は main() で共有されることに注意してください

pthread_mutex_t lock[10];

Linux で gcc を使用しています。説明が下手なので、質問が明確でない場合はお知らせください。

4

2 に答える 2

0

あなたはできる。ミューテックスのアドレスを渡すようにしてください。コピーすることはできません。

于 2012-12-25T20:02:54.760 に答える
0

よく考えることができます。別の c ファイルを作成し、以下を挿入します。

pthread_mutex_t lock[10];
type_t *produce(int tid) {

if (tid == {producer_1}) {
    //call function linked-list to share the data (IPC) and pass lock[5] to this function, in this case it will be lock 5
}
...
}

void consume(type_t* data, int tid) {
....
}

このようにして、処理を集中化して、プログラムをより読みやすくシンプルにします。スレッドで、プロデューサー/コンシューマー ID をproduce使用して適用するだけですconsume

于 2012-12-25T21:38:24.327 に答える