Они не являются взаимозаменяемыми и служат различным целям.
A критическая секция является мьютексом. Блоки кода, обернутые в критический, могут вводиться одним потоком за раз. Это также называется сериализацией, поскольку защищенные блоки выполняются последовательно.
Функция WaitForMultipleObjects
и ее различные родственники используются для блокировки до тех пор, пока объект синхронизации не будет сигнализирован. Это может быть событие, которое получает сигнал, завершается поток, завершается процесс, становится доступным мьютекс и т. Д.
Обычно функции ожидания используются для обеспечения правильной обработки зависимостей. Например, если вычисление может продолжаться только после завершения других вычислений, функция ожидания будет использоваться для блокировки до тех пор, пока эти другие вычисления не будут завершены. Использование правильной функции ожидания, а не загруженного вращения, позволяет избежать бесполезной траты тактов.