C 为正确的线程提供互斥

C 为正确的线程提供互斥,c,pthreads,mutex,C,Pthreads,Mutex,如果一个锁上有两个线程被阻塞,您如何选择哪个线程被阻塞 例如thread1调用mutex\u锁(aMut)但是aMut已经被锁定,所以thread1阻塞。出现了thread2,它在aMut上调用互斥锁并阻塞。如何确保aMut提供给thread2 这是我的尝试,但没有成功 /*global variables*/ pthread_mutex_t aMut = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond_var = PTHREAD_COND_INI

如果一个锁上有两个线程被阻塞,您如何选择哪个线程被阻塞

例如
thread1
调用
mutex\u锁(aMut)
但是
aMut
已经被锁定,所以
thread1
阻塞。出现了
thread2
,它在
aMut
上调用互斥锁并阻塞。如何确保
aMut
提供给
thread2

这是我的尝试,但没有成功

/*global variables*/
pthread_mutex_t aMut = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t  cond_var = PTHREAD_COND_INITIIALIZER;
pthread_cond_t  changeNumPrior = PTHREAD_COND_INITIIALIZER;
int highPriorityThreads = 0;

/*function that is passed to pthread_create()*/
void* functionThatIsPassedToPthreadCreate(void* arg)
{
   bool highPriority = false;
   if(arg->someConditionIsMet)
   {
     highPriorityThreads++;
     highPriority = true;
   }
   pthread_mutex_lock(&changeNumPrior);
    while(!highPriority && highPriorities > 0)//this doesn't work
    {
        pthread_cond_wait(&cond_var, &changeNumPrior);
    }
    pthread_mutex_unlock(&changeNumPrior);

    pthread_mutex_lock(&aMut);//if this blocks, by the time this mutex is aquired, there now may be high priority threads
    //code that requires exclusive access to shared resource protected by aMut
    pthread_mutex_unlock(&aMut);
    pthread_cond_signal(&cond_var);
}
仅仅说“现在我想安排这个任务,现在就安排这个任务”是不可能的,但是一些线程库允许设置任务的优先级,因此在安排任务时会更受欢迎


对于pthread,您可以使用。

更改您的设计,这样就不需要此要求。