我已经编写了一个故意死锁的代码,它有2个锁,而我解锁该程序的方式是这样的:
void ThreadAtWork1(){
m1.lock();
cout<<"Thread 1 has been called\n";
m2.lock();
m1.unlock();
m2.unlock();
}
void ThreatAtWork2(){
m2.lock();
cout<<"Thread 2 has been called\n";
m1.lock();
m2.unlock();
m1.unlock();
}
如何实施“不”等待&#39;解决方案阻止程序死锁?我知道我可以重新订购锁,但这不会解决无保留和等待解决方案。
我的主要职能:
int main(int argc, const char * argv[]) {
thread t1(ThreadAtWork1);
thread t2(ThreatAtWork2);
t1.join();
t2.join();
cout<<"\nMain exited...\n";
return 0;
}
感谢。
答案 0 :(得分:0)
我怀疑“没有等待”是一个一般原则,你试图避免在互斥锁被锁定时进行阻塞调用。除非你非常小心,否则这样做很容易造成死锁。
如果您必须同时锁定两个互斥锁,则“无保留并等待”不适合您。
通常,您可以重新设计系统,而不是要求同时锁定两个互斥锁。例如,将多个条件变量与同一个互斥锁相关联是完全可以的。
答案 1 :(得分:0)
前段时间我确实搞清楚了,但忘了更新这篇文章。下面是我如何去做它并获得100。
> gc .\export.csv
"Header1","Header2","Header3"
"9","3","17"