从不删除临界区会有什么后果?

3

我正在优化一大段使用了几个静态关键节并从未调用DeleteCriticalSection的本地代码,将它们留给处理退出以进行清理。

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

由于部署机器的范围,我们必须考虑Windows XP,而此本地代码是从托管应用程序运行的。

2个回答

2

关键区域只是一块内存,除非检测到争用,此时会创建一个事件对象进行同步。进程退出将清理任何残留的事件。如果您在运行时动态创建它们而不释放它们,那就很糟糕。如果没有被清理的固定数量是每个进程的,则不需要担心。

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


2
短答案可能是否定的。长答案是,这是一种懒惰的编程习惯,应该被修复。
要正确使用DeleteCriticalSection,需要以有序的方式关闭它,以便在删除之前/之后没有其他线程拥有或尝试拥有该部分。而程序员会懒得定义和实现如何为他们的程序工作进行关机。
有许多事情可以做,没有立即可衡量的后果 - 但这并不意味着它是正确的。同样对待代码库中的其他句柄/对象的态度将具有累积效应,可能会累加到"后果"。

同意这有点凌乱,我有一个长长的代码清理列表在计划中;-) - Andy Dent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接