如何回答这个问题?请帮忙。
考虑使用3个线程的以下程序。
locks l1, l2, l3;
*线程1
while(1){
l1.lock();
l2.lock();
printf(“Red”);
l3.unlock();
l1.unlock();}
*线程2
while(1){
l2.lock();
l3.lock();
printf(“Green”);
l1.unlock();
l2.unlock();}
*线程3
while(1){
l3.lock();
l1.lock();
printf(“Blue”);
l2.unlock();
l3.unlock();}
a)上述计划的可能结果是什么?你能解释一下这是怎么发生的吗? b)此代码是否会导致死锁?
答案 0 :(得分:1)
具体取决于l1.lock()
,l1.unlock()
等。由于这是标记的C ++(虽然标题是C),如果这些函数调用是管理std::mutex
个对象,结果是未定义的行为,每个线程解锁一个它没有锁定的互斥锁。
答案 1 :(得分:0)
为了便于理解,我将把锁称为数组(例如lock[0], lock[1], lock[2]
)
A)取决于哪个线程首先开始执行。
B)是的,它可以。它可能会。考虑一下:
lock[0]
lock[1]
lock[2]
lock[1]
,等待线程2 lock[2]
,等待线程3 lock[3]
,等待线程1