在下面的代码中,虽然我避免了死锁(由于反向锁定层次结构)。然而,由于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);
}