流沙团
简单进程同步的解决
2017-12-28 流沙团


关键技术: 创建两个事件  CreateEvent,  创建一个事件 CreateEvent 是无法解决问题的







// 20171228_01.cpp : Defines the entry point for the console application.
//

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

CRITICAL_SECTION cs;
DWORD g_Number = 0;
int g_Max = 10;
HANDLE hMutex;
HANDLE hEvent_Create;
HANDLE hEvent_User;

DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
)
{
//生产者
for(int i=0;i<g_Max;i++)
{
//EnterCriticalSection(&cs);

WaitForSingleObject(hEvent_Create,INFINITE);
g_Number = 1;
DWORD id = GetCurrentThreadId();
printf("生产者 %d 的数据 %d 放入缓冲区 \n",id, g_Number);
//SetEvent(hEvent);
//ResetEvent(hEvent);
SetEvent(hEvent_User);
Sleep(110);
//ReleaseMutex(hMutex);
//LeaveCriticalSection(&cs);
}


return 0;
}

DWORD WINAPI ThreadProc2(
LPVOID lpParameter // thread data
)
{
//消费者
for(int i=0;i<g_Max;i++)
{
//EnterCriticalSection(&cs);
//WaitForSingleObject(hMutex,INFINITE);
WaitForSingleObject(hEvent_User,INFINITE);
g_Number = 0;
DWORD id = GetCurrentThreadId();
printf("---------消费者 %d 的数据 %d 放入缓冲区 \n",id, g_Number);
SetEvent(hEvent_Create);
Sleep(100);
//LeaveCriticalSection(&cs);
//ReleaseMutex(hMutex);
}


return 0;
}


int main(int argc, char* argv[])
{

//printf("he111\n");
//测试生产者和消费者的问题

//EnterCriticalSection()

//InitializeCriticalSection(&cs);

//hMutex = CreateMutex(NULL,FALSE,"XYZ");
//OpenMutex()
//OpenMutex()


HANDLE hThread[2];
hThread[0] = CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
hThread[1] = CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);

hEvent_Create = CreateEvent(NULL,FALSE,TRUE,NULL);
hEvent_User = CreateEvent(NULL,FALSE,FALSE,NULL);

WaitForMultipleObjects(2,hThread,TRUE,INFINITE);


CloseHandle(hThread[0]);
CloseHandle(hThread[1]);



printf("main ..... end........\n");

//DeleteCriticalSection(&cs);
return 0;
}

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容