事件對象和條件變量有什麼區別? 我在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函數的調用指定其名稱。
不,雷米勒博更接近真相。條件變量是最近從Unix導入Windows的東西。事件對象是一個蒼白的模仿條件。事實上,僅僅給定事件對象和互斥體才能實現條件變量是不平凡的。請參閱http://www.cse.wustl.edu/~schmidt/win32-cv-1.html – Arkadiy 2009-08-01 01:04:42
最顯著差異是事件對象是一個內核對象,並且可以跨過程,只要它是當進程/線程試圖獲取活共享,與此相反,條件變量是一個用戶模式對象,它是光(只有與指針相同的尺寸,使用後纔會釋放任何東西)並且性能更好。
通常,條件變量通常與鎖一起使用,因爲我們需要保持數據正確同步。當考慮條件變量時,我們將它視爲自Vista以來改進的鍵控事件。
喬·達菲有一個博客帖子http://joeduffyblog.com/2006/11/28/windows-keyed-events-critical-sections-and-new-vista-synchronization-features/是解釋更詳細的信息。
- 1. 對象和變量有什麼區別?
- 2. 對象和變量對象之間的區別
- 3. Windows中的內核對象和事件對象有什麼區別?
- 4. 可變對象和不可變對象之間的區別
- 5. JavaScript的:區分DOM元素對象和事件對象
- 6. **變量和變量[] []之間的區別?
- 7. Win32事件與條件變量
- 8. Windows條件變量與事件
- 9. RoboFramework中資源文件和變量文件的區別?
- 10. OnLoad方法和Load事件的區別?
- 11. 事件和方法之間的區別
- 12. JSF:ViewActions和preRender事件之間的區別
- 13. 加入的條件和條件之間的區別
- 14. 互斥和條件變量之間的決定性區別是什麼?
- 15. particle.cloud中的particle.publish事件和particle.subscribe事件有什麼區別?
- 16. 「DOMContent事件」和「加載事件」之間的區別
- 17. 條件總和(變量)
- 18. 區別對象和功能
- 19. JS:事件和變量
- 20. Visual Studio中的KeyDown事件,KeyPress事件和KeyUp事件之間的區別
- 21. onFocus和onMouseEnter事件有什麼區別?
- 22. 行動和事件有什麼區別?
- 23. Control.Enter和Control.GotFocus事件有什麼區別?
- 24. 條件變量?
- 25. 條件變量
- 26. button.click事件和button.command事件有什麼區別?
- 27. 在KineticJS中,「點擊」事件和「contentClick」事件有什麼區別?
- 28. 在Access 2007中使用OLE對象和附件的區別?
- 29. 位圖對象和位圖文件的區別?
- 30. 變量的=和=>有什麼區別?
我不明白,如果CS中包含一個事件,那麼如何聲稱它受可用內存的限制而不是系統中可用事件的數量? – Mehrdad 2015-03-03 21:08:12