如果两个线程被锁定在锁上,那么您如何选择该锁呢?

例如,thread1调用mutex_lock(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,可以使用pthread_getschedparam进行此操作。

关于c - 提供互斥锁以更正线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26583261/

10-11 22:53
查看更多