国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

線程同步的幾種方式

2019-11-08 03:10:03
字體:
來源:轉載
供稿:網友


---------------------用戶模式下的同步對象--------------------------------1、 臨界區(CCriticalSection)-------------------當多個線程訪問一個獨占性共享資源時,可以使用臨界區對象。擁有臨界區的線程可以訪問被保護起來的資源或代碼段,其他線程若想訪問,則被掛起,直到擁有臨界區的線程放棄臨界區為止。

---------------------內核對象-----------------------------------------------------------------2、事件(CEvent)------------------------------------事件機制,分為自動重置事件對象和人工重置事件對象;1)自動重置事件對象,一旦被觸發(有信號,setEvent(h)),那么等待的所有線程中將只有一個線程能獲得事件對象的句柄h,并同時自動的將此事件對象設置為無信號的,只有當這個線程執行完了,并且調用了setEvent(h)來觸發這個事件對象,那么其他的線程才獲得,總之每次只能有一個等待的線程獲得事件對象,因為只要其中一個線程獲得了此事件對象h,那么就會自動的將h設置成為無信號的狀態,直到調用setEvent(h)來觸發這個事件對象;它能夠確保一個線程獨占對一個資源的訪問。2)人工重置事件對象,一旦被觸發(有信號,setEvent(h)),那么等待此事件對象的所有線程都將變成可調度的狀態,CUP會隨機的分配CPU時間給等待的所有線程,這些線程將同步的、隨機的獲取CPU的時間,來執行線程中的代碼。----------3、互斥量(CMutex)-------------------------------1)互斥量對象(包含一個線程ID,能夠知道是哪個線程訪問了他)能夠確保一個線程獨占對一個資源的訪問。2)如果線程ID為0(無效線程ID),那么互斥量將不為任何線程所占有,他處于觸發狀態;3)如果線程ID為非零,那么有一個線程已經占用了這個互斥量,它處于未觸發的狀態;4)與所有其他內核對象不同,假設線程視圖等待一個未觸發的互斥量對象,在這種情況下,線程通常會進入等待狀態,但是,系統會檢查想要獲得互斥量的線程的線程ID與互斥量對象內部記錄的線程ID是否相同,如果相同,那么系統會讓線程保持可調度狀態,即使該互斥量尚未觸發。互斥量與臨界區的行為完全相同,但是區別如下:1)互斥量是內核對象,臨界區是用戶模式下的同步對象,執行速度快于內核對象;2)不同進程中的線程可以訪問同一個互斥量,而且還可以設置等待的最長時間。-----------4、信號量(CSemphore)----------------------------信號量與其他所有內核對象相同,但是另外又包含了兩個32位的值:一個是最大資源計數,一個是當前資源計數。1)最大資源計數表示信號量可以控制的最大資源數量(這個是在創建信號量的時候就已經設定好了);2)當前資源計數表示信號量當前可用資源數量;信號量的規則如下:1)如果當前資源計數大于0,那么信號量處于觸發狀態;2)如果當前資源計數等于0,那么信號處于未觸發狀態;3)系統絕對不會讓當前資源計數變為負數;4)當前資源計數絕對不會大于最大資源計數。


上一篇:C#[ STAThread]

下一篇:拷貝構造函數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜阳县| 鄄城县| 南京市| 卢氏县| 麦盖提县| 北宁市| 平陆县| 临邑县| 阿克陶县| 乌鲁木齐县| 石台县| 禄劝| 湖口县| 扎赉特旗| 抚顺市| 雅安市| 蒙阴县| 调兵山市| 台中市| 缙云县| 隆尧县| 张家界市| 精河县| 敦化市| 岑溪市| 班玛县| 赤城县| 广宗县| 锡林浩特市| 扬州市| 株洲市| 博爱县| 西华县| 修水县| 历史| 休宁县| 利津县| 湟源县| 会宁县| 双江| 惠东县|