1. 程式人生 > WINDOWS開發 >WIN32生產消費經典同步但是以消耗時間為代價

WIN32生產消費經典同步但是以消耗時間為代價

// Event0616.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <WINDOWS.H>
HANDLE hEvent;
HANDLE hMutex;
DWORD dwM = 10;
DWORD dSignal = 0;
DWORD WINAPI ThreadPro1(LPVOID lpParameter)
{
    for (int i =0; i < dwM; i++)
    {
        if (dSignal == 0)
        {
            WaitForSingleObject(hMutex,INFINITE);
            dSignal 
= 1; DWORD CurrentID = GetCurrentThreadId(); printf("執行緒%d--生產了--%d件--產品!\n",CurrentID,dSignal); } else { i--; } ReleaseMutex(hMutex); } return 0; } DWORD WINAPI ThreadPro2(LPVOID lpParameter) { for (int i =0; i < dwM; i++) {
if (dSignal == 1) { WaitForSingleObject(hMutex,INFINITE); dSignal = 0; DWORD CurrentID = GetCurrentThreadId(); printf("執行緒%d--消費了--%d件--產品!\n",dSignal); } else { i--; } ReleaseMutex(hMutex); }
return 0; } int main(int argc,char* argv[]) { //1.安全屬性 2.FALSE通知/TRUE互斥 3.初始有無訊號TRUE有/FALSE沒有 4.名字 //hEvent = CreateEvent(NULL,FALSE,NULL); hMutex = CreateMutex(NULL,NULL); HANDLE hThead[2]; hThead[0] = CreateThread(NULL,0,ThreadPro1,NULL,0,NULL); hThead[1] = CreateThread(NULL,ThreadPro2,NULL);
//SetEvent(hEvent); WaitForMultipleObjects(sizeof(hThead),hThead,TRUE,INFINITE); CloseHandle(hThead[0]); CloseHandle(hThead[1]); CloseHandle(hEvent); //printf("Hello World!\n"); getchar(); return 0; }