【发布时间】:2015-05-05 20:31:19
【问题描述】:
我正在研究来自 http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html 的 c++ pthreads 中的互斥锁和死锁
我理解它们,但我只是在一个点上堆叠。我不明白以下代码的问题是什么。你能用简单明了的话解释一下吗?我从这个网站引用:
互斥锁死锁:... 将两个或多个互斥锁应用于一段代码时要小心。如果应用了第一个 pthread_mutex_lock 并且第二个 pthread_mutex_lock 由于另一个线程应用互斥锁而失败,则第一个互斥锁可能最终锁定所有其他线程以防止访问数据,包括持有第二个互斥锁的线程。线程可能会无限期地等待资源空闲,从而导致死锁。最好进行测试,如果发生故障,请释放资源并在重试之前停止。
01 ...
02 pthread_mutex_lock(&mutex_1);
03 while ( pthread_mutex_trylock(&mutex_2) ) /* Test if already locked */
04 {
05 pthread_mutex_unlock(&mutex_1); /* Free resource to avoid deadlock */
06 ...
07 /* stall here */
08 ...
09 pthread_mutex_lock(&mutex_1);
10 }
11 count++;
12 pthread_mutex_unlock(&mutex_1);
13 pthread_mutex_unlock(&mutex_2);
14 ...
提前致谢。
【问题讨论】:
-
为什么你认为这段代码有问题?它看起来更像是一个如何避免所描述问题的示例。
-
我认为代码是正确的,但我没看懂它在句子中的意思,他的句子很复杂,因此我认为代码有问题。
-
#Mike Seymour ,我对这句话一无所知:“如果应用了第一个 pthread_mutex_lock 并且第二个 pthread_mutex_lock 由于另一个线程应用互斥锁而失败,则第一个互斥锁最终可能会锁定所有其他线程访问数据,包括持有第二个互斥锁的线程。"
标签: c++ pthreads mutex deadlock