如果线程在临界区内死亡会发生什么?

时间:2013-09-28 17:44:23

标签: windows multithreading visual-c++ critical-section

这就是场景。我们有很多线程访问受关键部分保护的代码段,这确保了一次只有一个线程可以访问该部分。现在的问题是,如果线程在关键部分内死亡会发生什么?应用程序会挂起吗?或者有一些方法可以释放锁定?

2 个答案:

答案 0 :(得分:4)

来自MSDN:

  

如果线程在拥有临界区的所有权时终止,则临界区的状态是未定义的。

来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682608(v=vs.85).aspx

答案 1 :(得分:1)

你必须定义“死亡”。

你的意思是它通过不正确的内存或其他访问而出错吗?然后整个过程被操作系统抛弃。

你的意思是线程被终止(通过退出或其他线程终止它)?然后你遇到了麻烦,因为一切都已正确执行,包括线程终止,所以等待临界区的所有线程都会被永久停留。

你的意思是线程进入无限循环?我不确定Windows如何处理这种情况,但有两种策略:操作系统会假设“一切似乎都正常运行所以我应该远离”或者系统范围内的CPU配额会被用尽导致操作系统终止进程。只有进程(其中的一个线程)才能导致单个线程终止,所有其他机制都会抛弃整个进程。