我正在改进大量使用一些静态关键部分并且从不调用DeleteCriticalSection的本机代码,让它们处理退出以进行清理。
没有泄漏,也不担心 CS 总数太高,我只是想知道不清理它们是否会对 Windows 造成任何长期后果。我们有回归测试套件,每天会启动数千次程序,尽管最终用户不太可能做类似的事情。
由于部署机器的范围,我们还必须考虑 Windows XP,并且此本机代码是从托管应用程序运行的。
我正在改进大量使用一些静态关键部分并且从不调用DeleteCriticalSection的本机代码,让它们处理退出以进行清理。
没有泄漏,也不担心 CS 总数太高,我只是想知道不清理它们是否会对 Windows 造成任何长期后果。我们有回归测试套件,每天会启动数千次程序,尽管最终用户不太可能做类似的事情。
由于部署机器的范围,我们还必须考虑 Windows XP,并且此本机代码是从托管应用程序运行的。
除非检测到争用,否则临界区只是一块内存,此时会创建一个事件对象以进行同步。进程退出将清除任何挥之不去的事件。如果您在运行时动态地创建它们而不释放它们,那就太糟糕了。如果没有清理的那些是每个过程的固定数量,我不会担心。
原则上,每个进程资源都会在进程退出时被清理。像事件对象这样的内核资源肯定遵循这个原则。
简短的回答可能不是。长答案是,这是一种懒惰的编程实践,应该修复。
要正确使用 DeleteCriticalSection,需要以有序的方式关闭,以便在删除之前/之后没有其他线程拥有或尝试拥有该部分。程序员也懒得定义和实现关闭程序如何为他们的程序工作。
您可以做很多事情而不会立即产生可衡量的后果 - 但这并不意味着它是正确的。对同一代码库中的其他句柄/对象的类似态度也会产生累积效应,并可能增加“后果”。