События Win32 против условных переменных - PullRequest
1 голос
/ 30 апреля 2011

Я пишу библиотеку win32 , и мне нужно реализовать очередь производителя-потребителя, используя потоки win32.Пока все идет хорошо, но я столкнулся с дилеммой: использовать ли события или условные переменные , чтобы сообщить потребителю, что что-то добавлено?Я видел примеры, которые могут использовать любой из них.Лично для моей очереди мне нужна возможность ожидания нескольких сигналов одновременно (сигнал нажатой на элемент и сигнал quit ).Существует только один производитель и один потребитель.

Каковы преимущества и недостатки каждого из них?Учитывая мои требования, что бы вы порекомендовали и почему?Спасибо!

1 Ответ

1 голос
/ 30 апреля 2011

Обычно чтение осуществляется как:

WaitForSingleObject(evt);   // 1
EnterCriticalSection(&cs);  // 2
//... fetching data from the queue
LeaveCriticalSection(&cs);  // 3

Но с условными переменными (событиями особого вида) строки 1 и 2 можно заменить одним вызовом SleepConditionVariableCS(), который выполняет 1 и 2 действия атомарно.

В случаях с большими объемами (частые операции R / W) это даст вам некоторое преимущество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...