成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談談PulseEvent的缺陷,你明白了嗎?

開發 架構
你可以嘗試使用SignalObjectAndWait這個函數,它會將信號激發和等待合并到一個單獨的操作中。但是即使是這樣,你還是無法確定線程在脈沖發生時是否正在等待事件。

PulseEvent這個是API會釋放一個(如果手動重置開啟的話,則是多個)正在等待事件對象的線程,并將事件對象設置一個”未設置”的狀態。如果這個時候碰巧沒有任何線程在等待這個事件,則事件除了被設置為”未設置”狀態以外,不會發生任何其他事情。

但它的缺陷就在這里。

你怎么知道,你所認為的正在等待事件的線程就一定是”真的(正在等待)”?顯然我們不能使用如下的方法:

因為在上面的代碼中,激發信號和等待事件這兩個操作存在一個競爭條件。信號對象所激發的線程可能在你等待事件對象之前,就已經完成了所有工作并將激發出一個事件脈沖(PulseEvent)了。

你可以嘗試使用SignalObjectAndWait這個函數,它會將信號激發和等待合并到一個單獨的操作中。但是即使是這樣,你還是無法確定線程在脈沖發生時是否正在等待事件。

當一個線程等待事件時,設備驅動或者內核本身的一部分可能會借用線程來進行一些任務處理(通過內核模式APC)。在此期間,線程不處于等待狀態,因為設備驅動正在使用它。如果PulseEvent在線程借用時發生,則它不會從等待中喚醒,因為PulseEvent函數只會喚醒在PulseEvent發生時正在等待的線程。

用戶模式程序不僅無法阻止內核模式代碼對用戶模式程序線程執行此操作,甚至也沒辦法檢測它是否已經發生。

(你可能會看到這種事情發生的一個地方是,如果你將調試器附加到進程,因為調試器會執行諸如掛起和恢復線程之類的事情,這會導致內核 APC。)

因此,PulseEvent 函數是沒有什么用的,我們應該避免使用它。

它繼續存在只是為了向后兼容。

附加信息:與內核 APC 相關的整個業務還意味著,當你激發一個信號量、自動重置事件或其他在發出信號時釋放單個線程的同步對象時,你無法預測哪個線程將被喚醒。 如果一個線程被“借用”來服務內核 APC,那么當它返回到等待列表時,它“回到行尾”。 因此,等待內核對象的對象的順序是不可預測的并且不能依賴。

總結

請老老實實使用SetEvent/ResetEvent,簡單,實在!

最后

Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,里面有很多關于Windows的小知識,對于廣大Windows平臺開發者來說,確實十分有幫助。

本文來自:《PulseEvent is fundamentally flawed》

責任編輯:武曉燕 來源: 拓撲梅爾
相關推薦

2022-12-30 08:35:00

2023-12-08 08:38:15

EventLoopAPI瀏覽器

2022-10-10 18:38:56

inert屬性鍵盤

2023-12-28 08:43:28

前端算法搜索

2024-01-08 20:05:32

2022-10-19 08:19:32

動態基線預警

2023-11-06 07:37:01

函數式插槽React

2023-06-09 07:18:03

開源數據庫

2022-05-31 07:32:19

JDK8API工具

2024-08-28 13:09:50

2022-09-09 10:15:06

OAuthJava

2023-06-14 08:15:34

算法合并操作Winner

2024-03-27 13:33:00

MySQLInnoDB事務

2022-10-24 20:25:40

云原生SpringJava

2023-12-06 08:01:03

CSSPostCSS

2015-09-18 09:17:06

數據分析

2023-01-02 23:58:03

2022-10-08 08:09:13

MGRGreatSQL事務

2022-03-05 17:56:29

桌面應用開發

2024-01-25 09:10:10

GoRust標準庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩av一区二区在线观看 | 精品久久久久久久久久久久久久 | 91精品国产乱码久久久久久久 | 国产午夜精品久久 | 欧美精品久久久 | 成年人在线观看视频 | 欧美综合一区 | 国产精品影视在线观看 | 日韩在线国产精品 | 国产一区二区三区www | 成人黄色在线观看 | 国产精品1区2区3区 一区中文字幕 | 成人亚洲| 日韩国产精品一区二区三区 | 日日日日操 | 久久精品av麻豆的观看方式 | 欧美一级久久 | 精品国产欧美 | 性欧美精品一区二区三区在线播放 | 精品久久久久久久人人人人传媒 | 美女视频黄色片 | 午夜寂寞影院在线观看 | 国产精品一区二区三 | 99热精品国产 | 日韩成人中文字幕 | 成人美女免费网站视频 | 美女天天操| 精品久久久久久久久久久久 | 欧美大片在线观看 | 欧美激情欧美激情在线五月 | 黄色在线免费看 | 久久99视频精品 | 日韩欧美视频免费在线观看 | 成人a视频在线观看 | 成人精品视频在线观看 | 黄a网| 特级黄一级播放 | 亚洲日本中文字幕在线 | 精品乱子伦一区二区三区 | 91久久久久久久久 | 精品二区 |