这是场景。我们有很多线程访问受关键部分保护的代码段,从而确保一次只有一个线程可以访问该部分。现在的问题是,如果一个线程死在临界区内会发生什么?应用程序是否挂起?或者有一些锁定将被释放的方式?如果某个线程死于临界区域内会发生什么情况?
1
A
回答
4
从MSDN:
如果一个线程终止,同时它有一个关键部分的所有权,关键部分的状态是不确定的。
来源:http://msdn.microsoft.com/en-us/library/windows/desktop/ms682608(v=vs.85).aspx
1
您将不得不定义“死亡”。
你的意思是说,它通过错误的内存或其他访问错误?然后整个过程由操作系统抛出。
你的意思是线程被终止了(通过退出或由其他线程终止它)?那么你遇到了麻烦,因为包括线程终止在内的所有事情都已正确执行,所以等待临界区的所有线程都将永久停留。
你是说线程进入无限循环?我不确定Windows如何处理这种情况,但有两种策略:操作系统会假设“一切似乎运行正常,所以我应该远离”,否则将会有一个系统范围的CPU配额, OS终止进程。只有进程(线程在其中)可以导致单个线程终止,所有其他机制将抛出整个进程。
+0
我的意思是第二个选项,它要么退出或者其他某个线程终止它。 – Ram
相关问题
- 1. 如果某个进程意外死亡,进程内存会发生什么情况?
- 2. 如果我监视,会发生什么情况。当另一个线程处于临界区域时没有锁定时有条件地输入?
- 3. 如果一个ThreadPool线程死亡会发生什么?
- 4. TFS - 如果我删除工作区会发生什么情况?
- 5. 如果您从终端杀死该程序,会发生什么情况?
- 6. 如果堆栈内存变满,会发生什么情况
- 7. 如果Linux内核自行删除会发生什么情况?
- 8. 如果minSdkVersion低于targetSdkVersion,会发生什么情况?
- 9. 如果你的消费者少于分区,会发生什么情况?
- 10. 如果某些线程比其他线程首先结束会发生什么情况?
- 11. 线程分配内存,主进程死亡,会发生什么?
- 12. 如果在rootfs上发生内存泄漏,会发生什么情况?
- 13. 如果您杀死长时间运行的alter query,会发生什么情况?
- 14. 如果服务停止,后台线程会发生什么情况?
- 15. 如果我在asp.net中创建线程,会发生什么情况?
- 16. 如果我分离已加入的线程会发生什么情况?
- 17. 如果从主线程外部调用dispatch_main,会发生什么情况?
- 18. 容器关闭时睡眠线程会发生什么情况?
- 19. 从while循环中启动线程,会发生什么情况?
- 20. 未能获取锁的线程会发生什么情况?
- 21. 如果finally块引发异常,会发生什么情况?
- 22. 如果CFile :: Write引发异常会发生什么情况?
- 23. 如果iOS分发证书过期会发生什么情况?
- 24. 如果我的IExceptionPublisher引发异常,会发生什么情况?
- 25. 线程内线程:如果父线程被终止会发生什么?
- 26. 如果我将工作发布到线程池并且线程已在boost工作,会发生什么情况?
- 27. 工作线程发布消息时,如果主线程忙,会发生什么情况?
- 28. 如果我更改我网站的域名,cookie会发生什么情况?
- 29. 这是什么时候发生的?线程在临界区暂停
- 30. 为什么会发生这种情况?
若要进一步扩展:如果此行为不合适,请使用互斥锁而不是临界区。 –