Обычно чтение осуществляется как:
WaitForSingleObject(evt); // 1
EnterCriticalSection(&cs); // 2
//... fetching data from the queue
LeaveCriticalSection(&cs); // 3
Но с условными переменными (событиями особого вида) строки 1 и 2 можно заменить одним вызовом SleepConditionVariableCS()
, который выполняет 1 и 2 действия атомарно.
В случаях с большими объемами (частые операции R / W) это даст вам некоторое преимущество.