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

如何判斷代碼是否處于臨界區

新聞
有這么個問題,有個讀者問:當異常發生的時候,如果不知道是否要清理臨界區對象,什么是合適的異常處理方式?

有這么個問題

有個讀者問:當異常發生的時候,如果不知道是否要清理臨界區對象,什么是合適的異常處理方式?

[[340966]]

這個讀者的問題是這樣的:

  • “我正在使用SEH,在代碼中我使用了__try/__except塊來保護那些進入和退出臨界區的代碼。當異常發生的時候,我不知道我是否還在臨界區中還是已經出來了。就算是使用__try/__finally這種方式,也沒能解決我的

問題。”

問題答案:你可以知道你是否擁有臨界區對象,因為你一旦進入了,就表示你獲取到了臨界區對象。

方法1:通過指令指針進行判斷

“如果代碼執行到這里,則表示我肯定在臨界區里。”

 

如何判斷代碼是否處于臨界區

請注意,以上這種方法對于嵌套調用EnterCriticalSection的情況也是能正常工作的。

如果你再次獲取到了臨界區,則一定要記得將調用包含在它自身的try/finally結構中。

方法2:通過棧變量進行判斷

“我記得我是否已經進入臨界區”

 

如何判斷代碼是否處于臨界區

以上方法也是可以適用于嵌套調用EnterCriticalSection的情況。只是要記得,每次獲取臨界區對象,都要對cEntered進行加1。

方法3:通過對象來進行追蹤

將CRITICAL_SECTION封裝到一個對象中。

這種方法最適合上面那位讀者的情況。

 

如何判斷代碼是否處于臨界區

請注意,上面的代碼,不適用于嵌套臨界區的情況。如果你試著獲取臨界區對象兩次,則異常處理器只會退出臨界區一次。

還請注意,我們認為臨界區在初始狀態下為未獲取狀態并添加了斷言。如果恰好已經獲得了臨界區,則我們的清理代碼將會嘗試退出臨界區,但是它實際并沒有進入。(試想一下,如果在第一個”…”中就出現了異常。)

方法4:通過智能對象判斷

通過將CRITICAL_SECTION對象封裝到一個智能對象中。

可以在上面的代碼中添加如下方法:DWORD Depth() { return Owned() ? m_dwDepth : 0; }

代碼如下:

 

如何判斷代碼是否處于臨界區

當異常發生在臨界區的時候進行清理會導致這樣一個問題:我怎么知道清理操作是安全的?

你使用到了臨界區說明你想獨占的使用一個數據結構,但是如果在獲取臨界區的時候發現了異常,此時數據結構的狀態是不穩定的。如果只是簡單的退出臨界區會導致數據結構進入到一個不一致的狀態,就會導致一個很難診斷的問題:為什么我的引用計數沒有同步了?

后面我還會有更多關于異常的內容。

最后

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

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2012-02-29 15:35:45

2018-07-12 05:48:09

物聯網IOT智能技術

2013-12-06 10:20:21

2021-03-02 14:44:40

比特幣花旗集團金融機構

2011-05-25 10:46:39

Javascript

2020-10-16 08:09:58

算法代碼字符串

2018-11-06 10:31:36

互聯網數據計算機

2011-12-01 11:06:30

軟件定義網絡

2020-10-22 08:06:05

JavaScrip語言類型

2016-05-24 10:30:56

網站設計出色

2011-08-09 16:58:33

windows7Windows7是否被

2020-10-22 14:00:31

JavaScript數字變量

2017-12-11 11:00:27

內存泄露判斷

2013-01-10 09:47:50

辭職就業面試

2013-01-16 09:58:57

無線網無線網盜用

2014-05-13 09:53:24

算法π值

2017-12-06 19:00:53

2022-11-02 08:27:30

2021-02-28 19:30:31

Wi-Fi - 6Wi-Fi網絡

2021-03-22 11:43:07

Linux運維Linux系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 青娱乐av| 日韩精品网站 | 国产1区2区在线观看 | 国产精品视频久久久久 | 秋霞电影一区二区 | 天天爽夜夜骑 | 高清国产午夜精品久久久久久 | 国产精品夜夜春夜夜爽久久电影 | 午夜视频免费网站 | 殴美成人在线视频 | 欧美黑人国产人伦爽爽爽 | 国产精品中文字幕在线播放 | 久久国产欧美日韩精品 | 日韩综合色 | 久久亚 | 精品国产免费人成在线观看 | av电影手机版 | 日韩视频观看 | 日本网站免费在线观看 | 一区二区三区四区在线视频 | 亚洲欧美视频一区 | 国产特级毛片aaaaaa | 日韩毛片在线视频 | 福利二区 | 成人av一区二区亚洲精 | 久久久xx| 欧美日韩18| 久久精品国产一区二区三区 | 天天综合亚洲 | 插插宗合网 | 欧美高清视频一区 | 亚洲高清av| 麻豆一区一区三区四区 | 亚洲精品电影在线观看 | 黄色一级大片在线观看 | 久久蜜桃精品 | 日韩在线视频一区二区三区 | 99re6在线| 日韩中文字幕在线视频观看 | 免费在线一区二区 | 在线免费av电影 |