WIN32生產消費經典同步但是以消耗時間為代價
阿新 • • 發佈:2020-06-17
// 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; }