秒殺多線程-
推薦閱讀:




信號(hào)量Semaphore常用有三個(gè)函數(shù)
函數(shù)的原型和使用說(shuō)明
CreateSemaphore()
函數(shù)功能:創(chuàng)建信號(hào)量
函數(shù)原型:
第一個(gè)參數(shù)表示安全控制,一般直接傳入NULL。第二個(gè)參數(shù)表示初始資源數(shù)量。第三個(gè)參數(shù)表示最大并發(fā)數(shù)量。第四個(gè)參數(shù)表示信號(hào)量的名稱(chēng),傳入NULL
OpenSemaphore()
第一個(gè)參數(shù)表示訪問(wèn)權(quán)限,對(duì)一般傳入SEMAPHORE_ALL_ACCESS。第二個(gè)參數(shù)表示信號(hào)量句柄繼承性,一般傳入TRUE即可。
ReleaseSemaphore()
函數(shù)說(shuō)明:第一個(gè)參數(shù)是信號(hào)量的句柄。第二個(gè)參數(shù)表示增加個(gè)數(shù),必須大于0且不超過(guò)最大資源數(shù)量。(要增加信號(hào)量對(duì)象的當(dāng)前計(jì)數(shù)的量。該值必須大于零。如果指定的數(shù)量會(huì)導(dǎo)致信號(hào)燈的計(jì)數(shù)超過(guò)創(chuàng)建信號(hào)量時(shí)指定的最大計(jì)數(shù),則計(jì)數(shù)不會(huì)更改,函數(shù)將返回 FALSE。)第三個(gè)參數(shù)可以用來(lái)傳出先前的資源計(jì)數(shù),設(shè)為NULL表示不需要傳出。
注意:當(dāng)前資源數(shù)量大于0,表示信號(hào)量處于觸發(fā),等于0表示資源已經(jīng)耗盡故信號(hào)量處于末觸發(fā)。在對(duì)信號(hào)量調(diào)用等待函數(shù)時(shí),等待函數(shù)會(huì)檢查信號(hào)量的當(dāng)前資源計(jì)數(shù),如果大于0(即信號(hào)量處于觸發(fā)狀態(tài)),減1后返回讓調(diào)用線程繼續(xù)執(zhí)行。一個(gè)線程可以多次調(diào)用等待函數(shù)來(lái)減小信號(hào)量。
由于信號(hào)量是內(nèi)核對(duì)象,因此使用CloseHandle()
代碼
在經(jīng)典多線程問(wèn)題中設(shè)置一個(gè)信號(hào)量和一個(gè)關(guān)鍵段。用信號(hào)量處理主線程與子線程的同步,用關(guān)鍵段來(lái)處理各子線程間的互斥。詳見(jiàn)代碼:

可以看出來(lái),信號(hào)量也可以解決線程之間的同步問(wèn)題。
由于信號(hào)量可以計(jì)算資源當(dāng)前剩余量并根據(jù)當(dāng)前剩余量與零比較來(lái)決定信號(hào)量是處于觸發(fā)狀態(tài)或是未觸發(fā)狀態(tài),因此信號(hào)量的應(yīng)用范圍相當(dāng)廣泛。
參考:https://blog.csdn.net/morewindows/article/details/7481609