从不删除关键部分会有什么后果吗?

时间:2010-08-11 06:42:46

标签: windows critical-section

我正在改进大量本机代码,它使用一些静态关键部分,从不调用DeleteCriticalSection,让他们处理退出以进行清理。

没有泄漏,也没有担心CS的总数太高,我只是想知道是否有任何长期的Windows后果不清理它们。我们有回归测试套件,每天会发送数千次程序,尽管最终用户不太可能做这样的事情。

由于部署的计算机范围很广,我们也必须考虑Windows XP,并且此本机代码是从托管应用程序运行的。

2 个答案:

答案 0 :(得分:2)

关键部分只是一块内存,除非检测到争用,此时会为同步创建一个事件对象。进程退出将清除任何挥之不去的事件。如果你是在运行时动态创建它们而不是释放它们,那就太糟糕了。如果没有清理的是每个过程的固定金额,我不会担心。

原则上,当进程退出时,每个进程资源都会被清除。像事件对象这样的内核资源肯定遵循这个原则。

答案 1 :(得分:2)

简短的回答可能不是。答案很长,这是一个懒惰的编程实践,应该修复。

要正确使用DeleteCriticalSection,需要以有序的方式关闭,以便在删除之前/之后没有其他线程拥有或尝试拥有该部分。而程序员则懒得定义和实现shutdown对程序的工作方式。

你可以做很多事情,没有立即产生可衡量的后果 - 但这并不是正确的。对同一代码库中的其他句柄/对象的类似态度也会产生累积效应,并可能导致“后果”。