【发布时间】:2015-07-26 12:39:24
【问题描述】:
在多线程系统上,如果两个线程在锁定互斥锁后想要在共享内存上工作。
线程A:
pthread_mutex_lock(&mutex)
....... //Memory corruption or Assert and thread exits
pthread_mutex_unlock(&mutex)
线程 B:
pthread_mutex_lock(&mutex)
.......
pthread_mutex_unlock(&mutex)
如果线程 A 先获取互斥体并由于内存损坏或断言而退出,线程 B 将永远等待导致死锁。
- 一旦发生这种僵局,我有什么办法可以摆脱这种僵局?
- 有没有其他更安全的方法,类似于我可以使用的互斥锁?
【问题讨论】:
-
确保一个线程有一个需要在退出时释放的所有资源的列表。确保在退出时释放所有资源。
-
如果线程 A 由于“内存损坏”而退出,您已经有未定义的行为,没有什么可以帮助您。 IIRC 断言失败将退出进程,而不仅仅是线程。
标签: linux multithreading deadlock