Я бы предложил обернуть CRITICAL_SECTION классом, который будет обрабатывать инициализацию и неинициализацию объекта критического раздела в его конструкторе и деструкторе. Таким образом, в большинстве случаев вы будете потокобезопасны. (Вам нужно будет убедиться, что никто не получит доступ к объекту до завершения его конструктора, но это относительно просто.)
Существует несколько распространенных обёрток для CRITICAL_SECTION, которые вы можете использовать. MFC's CCriticalSection является очевидным выбором, но вы также можете создать свой собственный.