是否有2個或更多的線程在同一個事件處理程序中調用Win32 API的SetEvent時不安全?SetEvent是原子嗎?
1
A
回答
1
這是安全的,但要記住,如果一個線程設置它,另一個線程同時設置它,你不會得到兩個通知,只有一個;因爲第二個將它從True改爲...是真的。如果你擔心這個問題,請使用Semaphores。
0
假設您有多個線程正在等待相同的事件,運行相同的代碼。
- 如果您的代碼在完成處理之前未清除該事件,那麼您實際上擁有一個CS。由於事件一直處於信號狀態,直到它被清除(又稱爲非自動復位),除非旋轉CPU,否則多線程會發出信號。
- 如果你的代碼在處理開始時清除它,或者事件是autorset,那麼你將有多個線程運行相同的函數,如果這些線程共享任何東西,這是不安全的。
0
從多線程調用SetEvent沒有限制。
相關問題
- 1. fwrite是原子嗎?
- 2. 是Python的dict.pop原子嗎?
- 3. 嵌套的原子操作保證是原子嗎?
- 4. 是FD_SET,FD_CLR ...原子操作嗎?
- 5. Spring JdbcTemplate是更新原子嗎?
- 6. 是一個比較原子操作嗎?
- 7. 作家是原子方法嗎?
- 8. Aerospike記錄UDF是原子性的嗎?
- 9. Java分配問題 - 這是原子嗎?
- 10. Redis ZADD或ZSCORE是原子的嗎?
- 11. XA事務真的是原子嗎?
- 12. 是linux上的python's shutil.move()原子嗎?
- 13. OBJC_ASSOCIATION_ASSIGN是指原子還是非原子?
- 14. 是原子變量的多重賦值,是一個原子操作嗎?
- 15. 這是更快:SetEvent的話,SendMessage,PostMessage的
- 16. 是mq_send原子?
- 17. Java是調用原子方法原子
- 18. SQL原子事務不是原子的
- 19. 是++原子std ::原子<int>
- 20. .net中的setter原子嗎?
- 21. 這裏需要「原子」嗎?
- 22. 非原子值得嗎?
- 23. C原子操作,如果寫入都是原子交換,我需要原子加載嗎?
- 24. 是單行INSERT原子嗎?例如。在1M列的桌子上?
- 25. 是從子查詢原子中插入mysql嗎?
- 26. 調用SetEvent後調用CloseHandle
- 27. 什麼是原子?
- 28. 原子是什麼?
- 29. Redis是ZINCRBY原子?
- 30. 可以先在Laravel中原子處理或創建原子嗎?
看看這個鏈接,它可能會解決您的疑慮:http://blogs.msdn.com/oldnewthing/archive/2009/05/22/9634511.aspx – Andrey 2009-05-26 20:03:48