简单进程同步的解决

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


01// 20171228_01.cpp : Defines the entry point for the console application.
02//
03 
04#include "stdafx.h"
05#include <stdio.h>
06#include <windows.h>
07 
08CRITICAL_SECTION cs;
09DWORD g_Number = 0;
10int g_Max = 10;
11HANDLE hMutex;
12HANDLE hEvent_Create;
13HANDLE hEvent_User;
14 
15DWORD WINAPI ThreadProc1(
16                        LPVOID lpParameter   // thread data
17)
18{
19    //生产者
20    for(int i=0;i<g_Max;i++)
21    {
22        //EnterCriticalSection(&cs);
23         
24        WaitForSingleObject(hEvent_Create,INFINITE);
25        g_Number = 1;
26        DWORD id = GetCurrentThreadId();
27        printf("生产者 %d 的数据 %d 放入缓冲区 \n",id, g_Number);
28        //SetEvent(hEvent);
29        //ResetEvent(hEvent);
30        SetEvent(hEvent_User);
31        Sleep(110);
32        //ReleaseMutex(hMutex);
33        //LeaveCriticalSection(&cs);
34    }
35 
36 
37    return 0;
38}
39 
40DWORD WINAPI ThreadProc2(
41                         LPVOID lpParameter   // thread data
42                         )
43{
44    //消费者
45    for(int i=0;i<g_Max;i++)
46    {
47        //EnterCriticalSection(&cs);
48        //WaitForSingleObject(hMutex,INFINITE);
49        WaitForSingleObject(hEvent_User,INFINITE);
50        g_Number = 0;
51        DWORD id = GetCurrentThreadId();
52        printf("---------消费者 %d 的数据 %d 放入缓冲区 \n",id, g_Number);
53        SetEvent(hEvent_Create);
54        Sleep(100);
55        //LeaveCriticalSection(&cs);
56        //ReleaseMutex(hMutex);
57    }
58     
59     
60    return 0;
61}
62 
63 
64int main(int argc, char* argv[])
65{
66 
67    //printf("he111\n");
68    //测试生产者和消费者的问题
69     
70    //EnterCriticalSection()
71 
72    //InitializeCriticalSection(&cs);
73 
74    //hMutex = CreateMutex(NULL,FALSE,"XYZ");
75    //OpenMutex()
76    //OpenMutex()
77 
78     
79    HANDLE hThread[2];
80    hThread[0] = CreateThread(NULL,0,ThreadProc1,NULL,0,NULL);
81    hThread[1] = CreateThread(NULL,0,ThreadProc2,NULL,0,NULL);
82 
83    hEvent_Create = CreateEvent(NULL,FALSE,TRUE,NULL);
84    hEvent_User = CreateEvent(NULL,FALSE,FALSE,NULL);
85 
86    WaitForMultipleObjects(2,hThread,TRUE,INFINITE);
87 
88 
89    CloseHandle(hThread[0]);
90    CloseHandle(hThread[1]);
91 
92 
93 
94    printf("main ..... end........\n");
95     
96    //DeleteCriticalSection(&cs);
97    return 0;
98}

原文链接: 简单进程同步的解决 版权所有,转载时请注明出处,违者必究。
注明出处格式:流沙团 ( https://www.gyarmy.com/?post=352 )

发表评论

0则评论给“简单进程同步的解决”