父进程和子进程是否会陷入死锁,而子进程也将获得相同的资源?如果父包含两个线程怎么办?孩子也会得到2个帖子? fork如何才能保证线程安全?
答案 0 :(得分:2)
Wikipedia的一句话描述是
死锁是指两个或多个竞争行为各自等待另一个完成的情况,因此两者都没有。
最简单的情况是两个线程和两个资源。
主题A:
acquireResource(r1)
acquireResource(r2)
// Do stuff
releaseResource(r1)
releaseResource(r2)
主题B:
acquireResrouce(r2)
acquireResource(r1)
// Do stuff
releaseResource(r1)
releaseResource(r2)
如果发生以下事件序列,则会发生此代码死锁。
此时线程A无法继续,因为它已经拥有r2并且线程B无法继续,因为r1是拥有的。因此,任何线程都不能进入释放资源的程度。这是一个僵局。
通过确保在整个代码中以相同的顺序获取资源,可以避免像这样的简单案例。例如,如果线程B首先获得r1,则不会出现死锁。虽然很难避免,但还有很多其他方法可以实现死锁。