zoukankan      html  css  js  c++  java
  • 使用事件对象实现线程同步

    //事件对象也属于内核对象,包含一个使用计数,
    //一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,
    //另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。
    //有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。
    //当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。
    //当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。
    
    #include <Windows.h>
    #include <iostream>
    using namespace std;
    DWORD WINAPI Fun1Proc(
        LPVOID lpParameter
        );
    
    DWORD WINAPI Fun2Proc(
        LPVOID lpParameter
        );
    
    int tickets = 100;
    HANDLE g_hEvent;
    
    void main()
    {
        HANDLE hThread1;
        HANDLE hThread2;
        g_hEvent = CreateEvent(NULL,FALSE,TRUE,NULL);  //设置为自动重置
        //SetEvent(g_hEvent);
        hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
        hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);    
        CloseHandle(hThread1);
        CloseHandle(hThread2);
        
        Sleep(4000);
    }
    
    DWORD WINAPI Fun1Proc(
        LPVOID lpParameter
        )
    {
        while(TRUE)
        {
            WaitForSingleObject(g_hEvent,INFINITE);
            if(tickets>0)
            {
                Sleep(1);
                cout<<"Thread1 sell ticket : "<<tickets--<<endl;
            }
            else
                break;
            SetEvent(g_hEvent);
        }
        return 0;
    }
    
    DWORD WINAPI Fun2Proc(
        LPVOID lpParameter
        )
    {
        while(TRUE)
        {
            WaitForSingleObject(g_hEvent,INFINITE);
            if(tickets>0)
            {
                Sleep(1);
                cout<<"Thread2 sell ticket : "<<tickets--<<endl;
            }
            else
                break;
            SetEvent(g_hEvent);
        }
        return 0;
    }
  • 相关阅读:
    Judy alpha 第九天
    Judy alpha 第八天
    Judy alpha 第七天
    Judy alpha 第六天
    Judy alpha 第五天
    Judy alpha 第四天
    Fieldtrip 和 spm 文件读取
    matlab更改打开时候默认路径
    mne-python 安装大法
    Greenhouse-Geisser;统计结果报告;效应力大小介绍
  • 原文地址:https://www.cnblogs.com/jck34/p/2715391.html
Copyright © 2011-2022 走看看