答えやすいかもしれない一般的な質問がありますが、そうではないかもしれません。わからない。私のコードでは、4 つのスレッドが実行されており、すべてがリストを処理するように機能しており、実行するたびにそれぞれがリストの一部をポップしています。以下は、各スレッドのコードで、ミューテックスのロックが解除されるのを待ち、それ自体をロックし、それぞれの処理を実行してから、ミューテックスを再ロックします。
私の質問はこれです:特定のスレッドにロックを渡す方法はありますか? \
例: このコード (t1、t2、t3、および t4) を実行する 4 つのスレッドがあり、t1 がちょうど終了した場合、t1 がロックを t2 に渡し、t2 がロックをに渡すことを保証できる方法はありますか? t3など?
void *consumer(void *ptr){
int i;
// Print the thread ID
printf("Consumer TID %lu\n", (unsigned long)gettid());
// While the list isn't empty
while (1){
// Wait for the mutex
pthread_mutex_lock(&mutex);
// When you get it...
// If the list is empty
if (the_list.empty()){
// Unlock the mutex
pthread_mutex_unlock(&mutex);
break;
}
// Otherwise remove an element from the list
the_list.pop_front();
// And unlock the mutex
pthread_mutex_unlock(&mutex);
}
return NULL;
}
ありがとうございました!
更新 - ランダム な考え: 考えただけです。前の関数によってのみ解放された特定のミューテックスをそれぞれ取り込んだ 4 つの異なる関数があるでしょうか?