| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 секунды ну так это тот же 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 |
Хэндл хэндлу рознь. Понятное дело что используются функции ожидания, но, к примеру, ожидание мьютекса и эвента в win32 имеют различия. Функция WaitFor... , например не сработает если данный поток уже залочил мьютекс, а в случае эвента функции WaitFor... работают идентично для всех потоков, поскольку эвент это событие, момент срабатывания которого (и источник) неизвестен для ОС. Мьютекс же, хотя и работает с той же функцией ожидания, но несет смысловую нагрузку запрета одновременного исполнения участков кода. Поэтому, я считаю что условная переменная ближе по смыслу именно к эвенту, чем к иному механизму Win32 |
| Автор: cppGhost 20.1.2014, 14:18 |
| Вроде написано, что в xp не работает. Значит уже стремно использовать ) |