Оберните критический раздел в класс (используйте готовый или создайте свой собственный) и объявите глобальную переменную этого класса - тогда критический раздел будет инициализирован во время запуска программы и деинициализирован при выходе из программы.Поскольку запуск и выход выполняются в одном потоке, он будет работать надежно.