Есть ли какие-либо последствия, если никогда не удалять критические разделы?

Я улучшаю большой объем нативного кода, который использует несколько статических критических секций и никогда не вызывает DeleteCriticalSection, оставляя их для обработки выхода для очистки.

Нет никаких утечек и никаких опасений по поводу того, что общее количество CS становится слишком большим, мне просто интересно, есть ли какие-либо долгосрочные последствия для Windows, если их не очистить. У нас есть наборы регрессионных тестов, которые будут запускать программу тысячи раз в день, хотя конечные пользователи вряд ли сделают что-то подобное.

Из-за диапазона развернутых машин мы также должны учитывать Windows XP, и этот собственный код запускается из управляемого приложения.


person Andy Dent    schedule 11.08.2010    source источник


Ответы (2)


Критическая секция — это просто блок памяти, если не обнаружено состязание, и в это время создается объект события для синхронизации. Выход из процесса очистит все затянувшиеся события. Если бы вы создавали их динамически во время выполнения и не освобождали их, это было бы плохо. Если те, которые не очищаются, являются фиксированной суммой для каждого процесса, я бы не беспокоился об этом.

В принципе, каждый ресурс процесса очищается, когда процесс завершается. Ресурсы ядра, такие как объекты событий, определенно следуют этому принципу.

person Chris Smith    schedule 11.08.2010

Короткий ответ, вероятно, нет. Длинный ответ: это ленивая практика программирования, и ее следует исправить.

Чтобы правильно использовать DeleteCriticalSection, необходимо завершить работу упорядоченным образом, чтобы никакие другие потоки не владели или не пытались владеть разделом до/после его удаления. И программисты ленятся определять и реализовывать, как выключение будет работать в их программе.

Есть много вещей, которые вы можете сделать без немедленных измеримых последствий, но это не делает их правильными. Также подобное отношение к другим дескрипторам/объектам в той же кодовой базе будет иметь кумулятивный эффект и может привести к «последствиям».

person Winprogger    schedule 11.08.2010
comment
согласился, что это немного небрежно, и у меня есть длинный список очистки кода, который я планирую ;-) - person Andy Dent; 12.08.2010