Критические секции будут работать (они легче, чем мьютексы). InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection и DeleteCriticalSection - это функции, которые нужно искать на MSDN .
void func()
{
// cs previously initialized via InitializeCriticalSection
EnterCriticalSection(&cs);
operation1();
operation2();
LeaveCriticalSection(&cs);
operation3();}
}
EDIT:
Критические секции работают быстрее, чем мьютексы, так как критические секции в основном являются примитивами пользовательского режима - в случае несанкционированного получения (обычно в общем случае) системный вызов в ядре отсутствует, и получение занимает порядок десятков циклов. Переключатель ядра более дорогой (порядка сотен циклов). Единственный критический по времени раздел, обращающийся к ядру, предназначен для блокировки, что включает ожидание примитива ядра (мьютекс или событие). Получение мьютекса всегда включает вызов в ядро и, следовательно, на несколько порядков медленнее.
Однако критические секции могут использоваться только для синхронизации ресурсов в одном процессе. Для синхронизации между несколькими процессами необходим мьютекс.