这就是场景。我们有很多线程访问受关键部分保护的代码段,这确保了一次只有一个线程可以访问该部分。现在的问题是,如果线程在关键部分内死亡会发生什么?应用程序会挂起吗?或者有一些方法可以释放锁定?
答案 0 :(得分:4)
来自MSDN:
如果线程在拥有临界区的所有权时终止,则临界区的状态是未定义的。
来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682608(v=vs.85).aspx
答案 1 :(得分:1)
你必须定义“死亡”。
你的意思是它通过不正确的内存或其他访问而出错吗?然后整个过程被操作系统抛弃。
你的意思是线程被终止(通过退出或其他线程终止它)?然后你遇到了麻烦,因为一切都已正确执行,包括线程终止,所以等待临界区的所有线程都会被永久停留。
你的意思是线程进入无限循环?我不确定Windows如何处理这种情况,但有两种策略:操作系统会假设“一切似乎都正常运行所以我应该远离”或者系统范围内的CPU配额会被用尽导致操作系统终止进程。只有进程(其中的一个线程)才能导致单个线程终止,所有其他机制都会抛弃整个进程。