關鍵**段與迴圈鎖
當執行緒訪問另乙個執行緒擁有的關鍵**段時,呼叫執行緒就立即被置於等待狀態。即該執行緒從使用者態轉入核心態。呼叫
entercriticalsection
函式時它使用迴圈鎖進行迴圈,設法多次取得該資源。只有每次都失敗時,該執行緒才轉入核心態以便進入等待狀態。
bool initializecriticalsectionandspincount(pcritical_section pcs, dword dwspincount);
將迴圈鎖放入關鍵**,第乙個引數是關鍵**段結構的位址,第二個引數是使執行緒等待之前它試圖獲得資源時想要迴圈鎖迴圈迭代的次數。可以是0至
0 x 0 0 ffffff
之間的任何數字(單處理器計算機上時該引數忽略)。
dword setcriticalsectionspincount(pcritical_section pcs, dword dwspincount);
用於改變設定關鍵**段的迴圈次數(指導原則,保護對程序的堆疊進行訪問的關鍵**段使用的迴圈次數是
4000
次)。
錯誤處理
initializecriticalsection
函式可能執行失敗,它分配了乙個記憶體塊以便系統得到一些內部除錯資訊。如果該記憶體的分配失敗,就會出現乙個
status_no_memory
異常情況。可以使用結構化異常處理來捕捉這個異常。
如果兩個或多個執行緒同時爭用關鍵**段,則關鍵**段將使用乙個事件核心物件。如果記憶體不足,關鍵**段可能被爭用同時系統可能無法建立必要的事件核心物件。這時
entercriticalsention
函式將會產生乙個
exception_invalid_handle
異常。可以使用結構化異常處理方法來跟蹤錯誤。也可以用
initializecriticalsectionandspincount函式,
確保設定了
dwspincount
引數的高資訊位。當該函式發現高資訊位已經設定時,它就建立該事件核心物件,並在初始化時將它與關鍵**段關聯起來。如果事件無法建立,該函式返回
fa l s e。
第八章 資料修改 3
8.3 更新資料 use tempdb goif object id dbo.orderdetails u is not null drop table dbo.orderdetails if object id dbo.orders u is not null drop table dbo.ord...
第八章 執行緒池的使用
二 設定執行緒池的大小 三 配置threadpoolexecutor 執行緒工廠 在呼叫建構函式後再定製threadpoolexecutor 四 擴充套件threadpoolexecutor 五 遞迴演算法的並行化 沒見原理,講的是用法 對執行緒池進行配置和調優 不同的執行緒池的執行策略肯定不一樣 ...
第八章 類的高階
訪問修飾符 公開訪問 用pbulic關鍵字。受保護訪問 用protected關鍵字。預設訪問 沒有訪問。私有訪問 用private關鍵字。封裝 組裝,累的定義 屬性和行為 資訊隱藏 1.訪問修飾符public protected 預設 private 2.方法的實現 呼叫者無需知道方法的具體步驟,只...