成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

VC++多線程同步(一)Mutex互斥量-創(chuàng)新互聯(lián)

一 、同步機(jī)制的引入目的是為了解決三個(gè)主要問題

主要從事網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、自適應(yīng)網(wǎng)站建設(shè)、程序開發(fā)、微網(wǎng)站、重慶小程序開發(fā)公司等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了豐富的網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷經(jīng)驗(yàn),集策劃、開發(fā)、設(shè)計(jì)、營(yíng)銷、管理等多方位專業(yè)化運(yùn)作于一體,具備承接不同規(guī)模與類型的建設(shè)項(xiàng)目的能力。

1為了控制線程之間共享資源的同步訪問,保證共享資源的完整性.(比如一個(gè)線程正在更新一個(gè)數(shù)據(jù),而另外一個(gè)線程正在讀取該數(shù)據(jù),那么就不知道該數(shù)據(jù)是新的還是舊的,為了避免這種狀況的發(fā)生)

2確保線程之間的動(dòng)作,以制定的次序發(fā)送,例如一個(gè)線程的觸發(fā),需要另外一個(gè)線程的結(jié)果,作為條件。

3為了控制某一個(gè)共享資源的大訪問量,例如我們同時(shí)只能處理5個(gè)客戶的請(qǐng)求,這時(shí)候,我們需要放到隊(duì)列進(jìn)行等待。

                 二、同步概念就是等待

WIN32  提供了API 等待函數(shù)

DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);

參數(shù)1 :hHandle對(duì)象句柄. 可以制定一系列的對(duì)象,如

Event(事件),Mutex(互斥),Seamphore(信號(hào))Thread(線程)等

參數(shù)2:dwMilliseconds 定時(shí)時(shí)間間隔 單位milliseconds(毫秒)

1如果指定一個(gè)非零值,函數(shù)處于等待狀態(tài),直到hHandle標(biāo)記的對(duì)象被觸發(fā),  或者時(shí)間到了.

2如果dwMilliseconds為0,對(duì)象沒有被觸發(fā)信號(hào),函數(shù)不會(huì)進(jìn)入一個(gè)等待狀態(tài),它立即返回.

3如果dwMilliseconds為INFINITE,對(duì)象被觸發(fā),信號(hào),函數(shù)才會(huì)返回,大部分情況下只使用INFINITE這個(gè)宏.

這個(gè)函數(shù)是一個(gè)堵塞的函數(shù),意味著,只有這個(gè)函數(shù)運(yùn)行完成才進(jìn)行返回.因此他是一個(gè)同步的函數(shù).

返回值:

DWORD dw = WaitForSingleObject(hProcess,5000)

{

        //在指定之間內(nèi),代表等待成功,觸發(fā)了對(duì)象。

        case WAIT_OBJECT_0:

          //相應(yīng)操作

        break;

        //等待時(shí)間結(jié)束,對(duì)象沒觸發(fā),沒有成功 說明超時(shí)了

      case WAIT_TIMEOUT:

          //相應(yīng)操作

        break;

        //發(fā)生了一些錯(cuò)誤 ,可以線程句柄是NULL

        case WAIT_FAILED:

        //相應(yīng)操作

        break;

}

          三、Mutex互斥量對(duì)象(同步對(duì)象)

作用:

1 用于確保一個(gè)線程獨(dú)占對(duì)于一個(gè)資源的訪問

2 包含一個(gè)使用計(jì)數(shù)器,線程ID,以及一個(gè)遞歸計(jì)數(shù)

3 線程的id用來標(biāo)識(shí)當(dāng)前占用這個(gè)互斥量的是系統(tǒng)中的哪個(gè)線程

4 遞歸計(jì)數(shù)器表示這個(gè)線程占用該互斥量的次數(shù)

5 互斥量是使用最為頻繁的內(nèi)核對(duì)象之一

主要是當(dāng)某個(gè)共享資源被某個(gè),線程進(jìn)行加鎖操作后,其他的線程就無法訪問該資源,進(jìn)行讀寫.

1創(chuàng)建互斥量對(duì)象:

CreateMutex函數(shù)功能是建立互斥體對(duì)象,返回的就是這個(gè)對(duì)象

HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, //指向安全屬性的指針

BOOL bInitialOwner //初始化互斥對(duì)象所有者

LPCTSTR lpName //指向互斥對(duì)象名的

)

參數(shù)1正常情況下使用NULL,如果我們使用跨進(jìn)錯(cuò)的訪問。

參數(shù)2 通常為FALSE,那么線程ID和遞歸計(jì)數(shù)器,都被設(shè)置為0.

參數(shù)3 指定互斥體對(duì)象名字,如果以及存在擁有這個(gè),名字的一個(gè)事件,則打開現(xiàn)有的已命名互斥體,這個(gè)名字可能不予現(xiàn)有的事件,信號(hào)機(jī),可等待計(jì)時(shí)器或文件映射相符。

通常用法:HANDLE Mutex = CreateMutex(NULL,FALSE,NUKL);

2釋放互斥量對(duì)象:

ReleaseMutex函數(shù)

BOOL WINAPI ReleaseMutex(

HANDLE hMutex);

hMutex: 互斥對(duì)象的句柄

作用:這個(gè)函數(shù)會(huì)將對(duì)象的遞歸計(jì)數(shù)器減1,如果線程成功的等待了互斥量對(duì)象不止一次,那么線程必須調(diào)用release相同的次數(shù)

才能使對(duì)象的遞歸計(jì)數(shù)器變?yōu)?.當(dāng)遞歸計(jì)數(shù)器為0時(shí),函數(shù)還將線程ID設(shè)為0,使互斥量處于觸發(fā)狀態(tài).

我們發(fā)現(xiàn)互斥量對(duì)象的遞歸計(jì)數(shù)器和id創(chuàng)建的時(shí)候就是0(也就是處于觸發(fā)狀態(tài)),那什么時(shí)候會(huì)增加使他非觸發(fā)狀態(tài).

3整個(gè)互斥量的操作流程:  (加鎖和解鎖流程)

假設(shè):有一個(gè)全局的文件指針,同時(shí)又有多個(gè)線程,需要對(duì)該文件 指針進(jìn)行讀寫,但是,為了保證資源的完整性,我們?cè)谕粫r(shí)刻,

只允許一個(gè)線程進(jìn)行讀寫操作。

加鎖:

為了獲得對(duì)被保護(hù)的資源的訪問權(quán),線程要調(diào)用一個(gè)等待函數(shù)并轉(zhuǎn)入前面創(chuàng)建的互斥量句柄,在內(nèi)部,等待函數(shù)會(huì)檢查線程ID是否為0(如果為0也就是觸發(fā)狀態(tài))如果為0,那么函數(shù)會(huì)把互斥量句柄中的線程ID設(shè)為當(dāng)前調(diào)用線程的ID,(只有這個(gè)加鎖的線程,才

允許對(duì)資源進(jìn)行讀寫訪問操作 。)并把遞歸計(jì)數(shù)器設(shè)為1,此時(shí)

互斥量就處于非觸發(fā)狀態(tài),對(duì)互斥量的線程id賦值和遞歸計(jì)數(shù)器增加,都是原子操作的,所謂的原子操作,就是指操作系統(tǒng)保證在完成原子操作之前,不進(jìn)行線程的切換,然后當(dāng)前線程繼續(xù)運(yùn)行。

解鎖:

假設(shè)某一個(gè)線程成功的得到了互斥量,線程就知道自己獨(dú)占了對(duì)受保護(hù)的資源的訪問權(quán), 那么任何視圖通過等待互斥量,來獲得

對(duì)資源的訪問權(quán)的線程,將進(jìn)入等待狀態(tài),很重要的一點(diǎn)是:當(dāng)線程進(jìn)入等待狀態(tài)后,是不消耗Cpu時(shí)鐘頻率的.當(dāng)獨(dú)占線程對(duì)資源

操作完后, 必須調(diào)用ReleaseMutex函數(shù)(釋放)來將互斥量的遞歸計(jì)數(shù)器減1 ,如果遞歸計(jì)數(shù)器的值為0的話,那么還會(huì)將線程id

設(shè)置為0,這樣互斥量又處于觸發(fā)狀態(tài)了。

互斥量的注意點(diǎn):

1線程id和遞歸計(jì)數(shù)器遞增只能在wait(等待)函數(shù)中操作.

2必須要調(diào)用release函數(shù),否則會(huì)一直遞增導(dǎo)致死鎖。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章題目:VC++多線程同步(一)Mutex互斥量-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://jinyejixie.com/article18/dpoedp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站搜索引擎優(yōu)化、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司、商城網(wǎng)站、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管
东兰县| 隆化县| 陇西县| 微山县| 丹棱县| 汕头市| 阿克苏市| 陇西县| 铁岭市| 酉阳| 寻乌县| 邢台县| 云梦县| 玉树县| 江源县| 界首市| 元江| 广灵县| 金川县| 嘉峪关市| 新乡县| 卢氏县| 宁阳县| 无锡市| 孝义市| 兰坪| 康马县| 安仁县| 宁津县| 福州市| 阿拉善右旗| 佛坪县| 美姑县| 浦东新区| 白城市| 桐梓县| 大同市| 威远县| 泰来县| 株洲市| 唐海县|