Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > WaitForSingleObject vs condition_variable


Автор: cppGhost 10.1.2014, 12:39
Читаю c++x11 в части многопоточного программирования. Дошел до condition_variable и возник вопрос его аналога до стандарта (а именно в win32). Правильно ли я понимаю, что по сути они реализуют один и тот же механизм: нужно подождать завершения чего либо (или получить об этом сигнал). 

И еще вопрос: а не лучше ли реализована condition_variable в плане траты ресурсов системы? Ну то есть меньше ли при этом поток "ест" ресурсов?

Автор: Alexeis 10.1.2014, 13:20
Самое похожее, что приходить в голову это эвенты (CreateEvent) . Поток ждет возникновения события, в случае условной переменно ждет возникновения условия.

Автор: baldina 10.1.2014, 13:35
в некотором смысле можно сказать что это одно и то же. ожидание события в библиотеке под win с большой вероятностью реализовано через WaitFor...
WaitFor... почти не потребляет ресурсов, т.к. управление передается ОС (циклы никуда не деваются, конечно, но ресурсы процессора расходуется экономнее)

Добавлено через 43 секунды
Цитата(Alexeis @  10.1.2014,  13:20 Найти цитируемый пост)
CreateEvent

ну так это тот же HANDLE который надо ждать через WaitFor...

Добавлено через 6 минут и 39 секунд
молва утверждает, что http://msdn.microsoft.com/en-us/library/windows/desktop/aa904937(v=vs.85).aspx реализован эффективнее, чем блокировки C++11 в VS12

Автор: Alexeis 10.1.2014, 14:33
Цитата(baldina @  10.1.2014,  14:35 Найти цитируемый пост)
ну так это тот же HANDLE который надо ждать через WaitFor...

  Хэндл хэндлу рознь. Понятное дело что используются функции ожидания, но, к примеру, ожидание мьютекса и эвента в win32 имеют различия. Функция WaitFor... , например не сработает если данный поток уже залочил мьютекс, а в случае эвента функции WaitFor... работают идентично для всех потоков, поскольку эвент это событие, момент срабатывания которого (и источник) неизвестен для ОС. Мьютекс же, хотя и работает с той же функцией ожидания, но несет смысловую нагрузку запрета одновременного исполнения участков кода. Поэтому, я считаю что условная переменная ближе по смыслу именно к эвенту, чем к иному механизму Win32

Автор: xvr 13.1.2014, 16:40
Цитата(cppGhost @  10.1.2014,  12:39 Найти цитируемый пост)
Дошел до condition_variable и возник вопрос его аналога до стандарта (а именно в win32)

Там и родной есть (а не только аналог) - http://msdn.microsoft.com/en-us/library/windows/desktop/ms682052%28v=vs.85%29.aspx

Автор: cppGhost 20.1.2014, 14:18
Вроде написано, что в xp не работает. Значит уже стремно использовать )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)