关于线程和死锁的一些问题

时间:2010-05-11 01:51:03

标签: multithreading

如果父级正在使用资源,那么

父进程和子进程是否会陷入死锁,而子进程也将获得相同的资源?如果父包含两个线程怎么办?孩子也会得到2个帖子? fork如何才能保证线程安全?

1 个答案:

答案 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)

如果发生以下事件序列,则会发生此代码死锁。

  1. 线程A获取r1
  2. 上下文切换到主题B
  3. 线程B获取r2
  4. 此时线程A无法继续,因为它已经拥有r2并且线程B无法继续,因为r1是拥有的。因此,任何线程都不能进入释放资源的程度。这是一个僵局。

    通过确保在整个代码中以相同的顺序获取资源,可以避免像这样的简单案例。例如,如果线程B首先获得r1,则不会出现死锁。虽然很难避免,但还有很多其他方法可以实现死锁。