我有一个一般性的问题,可能很容易回答,但可能不是。我不知道。在我的代码中,我有四个线程在运行,所有线程都在通过一个列表工作,每次运行时每个线程都会弹出一个列表。下面是每个线程的代码,它们等待互斥锁解锁,自己锁定,做他们的事情,然后重新锁定互斥锁。
我的问题是:有没有办法将锁传递给特定线程?\
例如:如果我有四个线程运行这段代码(t1、t2、t3 和 t4)并且 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;
}
谢谢!
更新 - 随机想法: 我只是有一个想法。是否有四个不同的函数,每个函数都接受一个特定的互斥锁,只由前一个函数释放?