假設我有一個共享對象,其中有一段代碼受關鍵部分保護,並且有多個線程正在訪問該對象以進行讀取/寫入。當線程在臨界區內時,其他線程正在等待。線程一旦離開CS,操作系統就可以訪問任何等待的線程。使用互斥鎖守護關鍵部分
如果我僅限於一個進程,那麼CS本身是否能夠很好地保護共享對象?
我問,因爲我已經看到了網絡,正確的方式做它是使用一個內核對象(例如:互斥,semaphone)看守CS。希望使用共享資源的線程需要首先使用WaitForSingleObject類型的函數獲取互斥/信號量。如果使用互斥鎖,那麼只有一個可以訪問資源。一旦獲得互斥體,線程進入CS,完成應該做的事情,然後離開CS並釋放互斥體。然後操作系統允許任何其他等待線程獲取互斥鎖等等。
但是是不是隻使用CS相同?
此外,使用互斥鎖應該比單獨使用CS慢得多。我看到的僅使用CS的唯一問題是,如果線程在CS內部崩潰,那麼其他線程可能永遠不會訪問共享資源。
有沒有其他理由爲什麼這種方法更好? 在此先感謝
是否應該將其移至[計算機科學](http://cs.stackexchange.com/)? – Greg 2012-08-16 20:21:37
我從來沒有見過任何代碼能夠完成您所說的所見過的任何代碼。你可以指向一些獲得互斥鎖或sempahore的代碼,然後獲得具有相同範圍的關鍵部分嗎?我懷疑你可能會誤解或誤解那些代碼,這就是你混淆的根源。 (也可能你混淆了術語「臨界區」的兩種不同用法,一種意思是特定的同步原語,另一種意思是代碼區域受類似互斥體同步保護的代碼區域) – 2012-08-16 20:24:08
謝謝大衛,我的意思是CSection窗口結構(InitializeCS,EnterCS,LeaveCS,DeleteCS)。難道是我誤解了我讀的東西? – user1599391 2012-08-16 20:57:33