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",CurrentID,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,FALSE,NULL); hMutex = CreateMutex(NULL,FALSE,NULL); HANDLE hThead[2]; hThead[0] = CreateThread(NULL,0,ThreadPro1,NULL,0,NULL); hThead[1] = CreateThread(NULL,0,ThreadPro2,NULL,0,NULL); //SetEvent(hEvent); WaitForMultipleObjects(sizeof(hThead),hThead,TRUE,INFINITE); CloseHandle(hThead[0]); CloseHandle(hThead[1]); CloseHandle(hEvent); //printf("Hello World!\n"); getchar(); return 0; }

 

相关文章