【问题标题】:What will happen to thread B if thread A is killed in same process?如果线程 A 在同一进程中被杀死,线程 B 会发生什么?
【发布时间】:2012-05-29 14:47:18
【问题描述】:

假设一个进程产生了一个线程A,并且这个线程进一步产生了一个新的线程B,现在假设线程A被杀死,那么线程B会发生什么。

我认为如果这些是 KLT,那么线程 B 被杀死肯定不会发生任何事情。对于 ULT,线程 B 也不应该发生任何事情

【问题讨论】:

  • 线程 B 将继续执行。线程以火和忘记的方式工作。

标签: multithreading kernel kill


【解决方案1】:

什么都没有。在分叉过程中发生的情况是线程 B 通过获取对线程 A 的页表的引用(虚拟内存引用)开始。一旦从 A 或 B 对这些页表进行任何更改,就会创建一个副本(为每个页面)并提供给它们两者。在这种情况下,B 只会继承所有的页表并做自己的事情。

【讨论】:

  • 你确定一个线程创建另一个线程时使用了fork(),并且每个线程都有与之关联的页表吗?
  • 你可以使用 fork 或 execv。不同之处在于分配内存的方式。在 fork 中,页表被继承,而在 execv 中,为进程提供了全新的内存。是的,每个线程都有与之关联的页表。
猜你喜欢
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多