臨界區(qū) 互斥體 測試代碼

臨界區(qū)

#include "stdafx.h"
#include <windows.h>

int total = 100;
CRITICAL_SECTION cs;

DWORD WINAPI test1(LPVOID param)
{
        bool isRun = true;
        while(isRun)
        {
                EnterCriticalSection(&cs);
                if(total>0)
                {
                        printf("線程test1工作中=====還剩%d張票\n",total);
                        total--;
                        printf("賣出一張,還剩%d張票\n",total);
                }
                else
                {
                        isRun = false;
                }
                LeaveCriticalSection(&cs);
        }

        return 0;
}



DWORD WINAPI test2(LPVOID param)
{
        bool isRun = true;
        while(isRun)
        {        
                EnterCriticalSection(&cs);
                if(total>0)
                {
                        printf("線程test2工作中=====還剩%d張票\n",total);
                        total--;
                        printf("賣出一張,還剩%d張票\n",total);
                }
                else
                {
                        isRun = false;
                }

                LeaveCriticalSection(&cs);
        }
        return 0;
}



int main(int argc, char* argv[])
{
        HANDLE hThread[2];
        InitializeCriticalSection(&cs);

        hThread[0] = CreateThread(NULL,0,test1,NULL,0,NULL);
        hThread[1] = CreateThread(NULL,0,test2,NULL,0,NULL);
        WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
        CloseHandle(hThread[0]);
        CloseHandle(hThread[1]);

        printf("Hello World!\n");
        return 0;
}

互斥體

#include "stdafx.h"
#include "windows.h"
 
int main(int argc, char* argv[])
{
    //創(chuàng)建互斥體
    HANDLE m_hMutex = CreateMutex(NULL,FALSE,"cplusplus_me");
    /*
        m_hMutex創(chuàng)建成功返回句柄,如果已經(jīng)存在返回已經(jīng)存在的句柄,
        GetLastError 返回  ERROR_ALREADY_EXISTS
    */

    WaitForSingleObject(m_hMutex,INFINITE);//獲取令牌
    DWORD dwRet = GetLastError();
    if (m_hMutex)
    {
        if (ERROR_ALREADY_EXISTS == dwRet)//防止多開的一種手段
        {
            printf("程序已經(jīng)在運(yùn)行中了,程序退出!\n");
            CloseHandle(m_hMutex);
            return 0;
        }
    }
    else
    {
        printf("創(chuàng)建互斥量錯(cuò)誤,程序退出!\n");
        CloseHandle(m_hMutex);
        return 0;
    }
    while(1)
    {
        printf("cplusplus_me\n");
    }

    ReleaseMutex(m_hMutex);//釋放令牌
    CloseHandle(m_hMutex);
    return 0;
}

想知道CreateMutex的第二個(gè)參數(shù)的朋友,自己查下文檔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 在上篇中,我們已經(jīng)討論過如何去實(shí)現(xiàn)一個(gè) Map 了,并且也討論了諸多優(yōu)化點(diǎn)。在下篇中,我們將繼續(xù)討論如何實(shí)現(xiàn)一個(gè)線...
    一縷殤流化隱半邊冰霜閱讀 7,682評論 5 41
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 一、線程的創(chuàng)建和調(diào)度 1.線程是程序執(zhí)行的某一條指令流的映像。 為了進(jìn)一步減少處理機(jī)制的空轉(zhuǎn)時(shí)間,支持多處理器及減...
    穹藍(lán)奧義閱讀 1,124評論 2 5
  • 本人應(yīng)東哥的任務(wù),對我今年看的電影做了匯總和評價(jià),僅包括2016上映的新片(有幾部可能首映時(shí)間非2016)。...
    MaxUx閱讀 247評論 0 0
  • 蟬鳴不絕的九月,天氣的炎熱開始降下來,時(shí)不時(shí)會有微風(fēng)拂過校園,帶來一陣清涼。蘇木上初三了,因?yàn)榍昂笞赖木壒?,她和?..
    思緒云騫閱讀 349評論 0 1