在阻塞共享资源后,当另一个线程进入无限循环时释放资源

时间:2015-08-22 19:14:05

标签: multithreading thread-safety pthreads

在下面的代码中,虽然我避免了死锁(由于反向锁定层次结构)。然而,由于T2进入无限循环,互斥锁m1和m2永远不会释放,在这种情况下,系统既不能实现进步也不能有效等待(就时间而言)。我该如何处理这种情况?有没有办法打断持有资源的线程?至少对于pthread互斥锁,互斥锁的所有权与锁定它的线程有关!我们怎么能解锁另一个线程持有的互斥锁?

线程T1:

 while(1) {
  pthread_mutex_lock( &m1);
    //use resource 1
    if (pthread_mutex_trylock(&m2) ) {
       //Got the lock, do processing
      }
    else {
       //Release m1
        pthread_mutex_unlock(&m1);
        continue;
     }
      pthread_mutex_unlock(&m2);
      pthread_mutex_unlock(&m1);
    }

Thread T2:

       pthread_mutex_lock( &m2);
       pthread_mutex_lock(&m1)
       //Goes in an infinite loop here
       pthread_mutex_unlock(&m1);
       pthread_mutex_unlock(&m2);
     }

0 个答案:

没有答案