Например такой вариант:
void SomeRoutine (void)
{
EnterCriticalSection(pCs);
try
{
// много чего делаем.
}
catch(...){}
LeaveCriticalSection(pCs);
}
Если не использовать try/catch, то возможное исключение
не даст вызвать LeaveCriticalSection.
Это может привести к неприятным проблемам в многопоточном приложении.