В чем разница между объектами событий и переменными условия? Я спрашиваю в контексте WIN32 API.Разница между объектом события и переменной условия
ответ
Объекты событий являются объектами уровня ядра. Они могут быть разделены между границами процесса и поддерживаются на всех версиях ОС Windows. При желании они могут использоваться как собственные автономные блокировки для общих ресурсов. Поскольку они являются объектами ядра, ОС имеет ограничения на количество доступных событий, которые могут быть выделены за раз.
Условие Переменные - это объекты уровня пользователя. Они не могут быть разделены между границами процесса и поддерживаются только в Vista/2008 и более поздних версиях. Они не действуют как свои собственные блокировки, но требуют от них отдельный замок, например критический раздел. Поскольку они являются объектами пользователя, количество доступных переменных ограничено доступной памятью. Когда условная переменная укладывается в спящий режим, она автоматически освобождает указанный объект блокировки, чтобы другой поток мог его получить. Когда «Условная переменная» просыпается, он автоматически повторно запрашивает указанный объект блокировки.
Что касается функциональности, подумайте об условной переменной как о логической комбинации двух объектов, работающих вместе - keyed event и объекта блокировки. Когда переменная состояния переводится в спящий режим, она сбрасывает событие, освобождает блокировку, ожидает, когда событие будет сигнализировано, а затем повторно закроет блокировку. Например, если вы используете критический раздел в качестве объекта блокировки, то SleepConditionalVariableCS()
похож на последовательность вызовов ResetEvent()
, LeaveCriticalSection()
, WaitForSingleObject()
и EnterCriticalSection()
. Если в качестве блокировки используется SRWL, то SleepConditionVariableSRW()
похож на последовательность вызовов ResetEvent()
, ReleaseSRWLock...()
, WaitForSingleObject()
и AcquireSRWLock...()
.
Они очень похожи, но объекты событий работают через границы процесса, а переменные условия - нет. Из MSDN documentation on condition variables:
Состояния переменных пользовательский режим объектов, которые не могут быть разделены по процессам.
От MSDN documentation on event objects:
Темы в других процессах могут открыть дескриптор существующего объекта события путем , указав его имя в вызове функции OpenEvent.
Нет, Реми Лебо ближе к истине. Условие Variable - это то, что недавно было импортировано из Unix в Windows. Объект события - это бледное подражание Условию.На самом деле, нетривиально реализовать условие Var, заданное только для объекта события и Mutex. См. Http://www.cse.wustl.edu/~schmidt/win32-cv-1.html – Arkadiy
Наиболее значительным отличием является объект Event - объект ядра и может быть разделен между процессами, если он жив, когда процессы/потоки пытаются получить, напротив, переменная Condition является объектом пользовательского режима, который является свет (имеет только тот же размер, что и указатель, и не имеет ничего дополнительного, чтобы быть выпущенным после его использования) и имеет лучшую производительность.
Обычно переменная состояния часто используется вместе с замками, так как мы должны правильно синхронизировать данные. Рассматривая переменную Condition Variable, мы рассматриваем ее как ключевые события, которые были улучшены с Vista.
Joe duffy имеет сообщение в блоге http://joeduffyblog.com/2006/11/28/windows-keyed-events-critical-sections-and-new-vista-synchronization-features/, которое объясняет более подробную информацию.
- 1. Разница между объектом и переменной Объект
- 2. В чем разница между объектом и переменной?
- 3. разница между объектом и классом
- 4. Есть ли разница между объектом и объектом?
- 5. Какая разница между объектом и строковым объектом
- 6. Разница между объектом и объектом String?
- 7. Разница между объектом Node и объектом Element?
- 8. Разница между бизнес-объектом и объектом передачи?
- 9. разница между объектом + "" и Object.ToString()
- 10. Разница между объектом и словарем?
- 11. разница между переменным и объектом
- 12. разница между объектом и объект
- 13. Разница между объектом и NSObject
- 14. Разница между конструктором и объектом
- 15. В чем разница между переменной, объектом и ссылкой?
- 16. Какова фактическая разница между «объектом» и «переменной» в Objective-C?
- 17. Разница между [переменной объекта] и объектом. Переменная в Obj-C?
- 18. Разница между ++ переменной и переменной ++
- 19. Разница между ** переменной и переменной [] []?
- 20. Разница в инициализации переменной обычно и объектом
- 21. В чем разница между объектом ядра и объектом события в Windows?
- 22. разница между объектом и экземпляром для классов
- 23. Разница между графическим объектом getGraphics и paintComponent
- 24. Разница между объектом и функцией в javascript
- 25. Разница между типом данных и объектом
- 26. Разница между сущностью JPA и объектом Hibernate
- 27. В чем разница между объектом и экземпляром?
- 28. Разница между Objects.hashCode() и новым объектом(). HashCode()?
- 29. Разница между объектом кода и исполняемым файлом
- 30. Разница между объектом и классом в PHP?
Я не понимаю, если CS содержит событие внутри него, то как вы можете утверждать, что он ограничен доступной памятью а не количеством доступных событий в системе? – Mehrdad
Я не сказал, что CS содержит объект события * ACTUAL *, что я сказал «технически, это не то, что условная переменная действительно делает внутренне», IOW это только ACTS, как будто оно использует событие, но, скорее всего, это не , Информация о том, как CS ждет, является частной для реализации ОС. Например, в случае 'SleepConditionVariableCS()' он скорее использует 'SleepEx()' вместо этого, а затем просыпается тайм-аутом или APC из 'WakeConditionVariable()'. Я обновил ответ, чтобы это отразить. –
После того, как вы ответите на вопрос о гусеничном ходу, реализация, скорее всего, будет использована [ключевое событие] (http://joeduffyblog.com/2006/11/28/windows-keyed-events-critical-sections-and-new-vista-synchronization-features /) как ожидаемый объект. Таким образом, несколько CS используют общий доступ к одному объекту события ядра, который всегда доступен, и его можно ожидать отдельными потоками по отдельности. –