C++中Semaphore内核对象用法实例

本文实例讲述了C++中Semaphore内核对象的用法,分享给大家供大家参考。具体方法如下:

// Semaphore.cpp : 定义控制台应用程序的入口点。  

//  

  

#include "stdafx.h"  

#include <Windows.h>  

#include <process.h>   

  

HANDLE g_hSemaphore;  

DWORD g_nConut1 = 0;  

DWORD g_nConut2 = 0;  

unsigned __stdcall ThreadProc1( void* pArguments )  

{  

    ::WaitForSingleObject(g_hSemaphore, INFINITE);  

    for (int i=0;i<10000;i++)  

    {  

        g_nConut1++;  

        g_nConut2++;  

    }  

    ::ReleaseSemaphore(g_hSemaphore, 1, NULL);  

    printf("ThreadProc1\n");  

    return 0;  

}  

  

unsigned __stdcall ThreadProc2( void* pArguments )  

{  

    ::WaitForSingleObject(g_hSemaphore, INFINITE);  

    for (int i=0;i<10000;i++)  

    {  

        g_nConut1++;  

        g_nConut2++;  

    }  

    ::ReleaseSemaphore(g_hSemaphore, 1, NULL);  

    printf("ThreadProc2\n");  

    return 0;  

}  

  

unsigned __stdcall ThreadProc3( void* pArguments )  

{  

    ::WaitForSingleObject(g_hSemaphore, INFINITE);  

    for (int i=0;i<10000;i++)  

    {  

        g_nConut1++;  

        g_nConut2++;  

    }  

    ::ReleaseSemaphore(g_hSemaphore, 1, NULL);  

    printf("ThreadProc3\n");  

    return 0;  

}  

int _tmain(int argc, _TCHAR* argv[])  

{  

    g_hSemaphore = ::CreateSemaphore(NULL, 2, 2, NULL);  

    HANDLE hThread[3];  

    hThread[0] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc1, NULL, 0, NULL);  

    hThread[1] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc2, NULL, 0, NULL);  

    hThread[2] = (HANDLE)::_beginthreadex(NULL, 0, ThreadProc3, NULL, 0, NULL);  

  

    ::WaitForMultipleObjects(2,hThread,TRUE, INFINITE);  

    printf("g_count1=%d\n", g_nConut1);  

    printf("g_count2=%d\n", g_nConut2);  

    printf("main finished.\n");  

    return 0;  

}

希望本文所述对大家的C++程序设计有所帮助。