• 使用事件对象实现线程同步


    //事件对象也属于内核对象,包含一个使用计数,
    //一个用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值,
    //另一个用于指明该事件处于已通知状态还是未通知状态的布尔值。
    //有两种不同类型的事件对象。一种是人工重置的事件,另一种是自动重置的事件。
    //当人工重置的事件得到通知时,等待该事件的所有线程均变为可调度线程。
    //当一个自动重置的事件得到通知时,等待该事件的线程中只有一个线程变为可调度线程。
    
    #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;
    }
  • 相关阅读:
    理解jquery的$.extend()、$.fn和$.fn.extend()
    jquery中的$.fn的用法
    【转】区别 (function($){...})(jQuery)、$(function(){ })和$.fn
    linux常用目录和文件解析
    Linux通配符与正则表达式
    CentOS6配置邮件发送
    svn简单上传下载文件命令
    CentOS6源码安装zabbix服务器
    搭建zabbix服务器常见问题解析处理
    CentOS6安装Zabbix(RPM包)
  • 原文地址:https://www.cnblogs.com/jck34/p/2715391.html
Copyright © 2020-2023  润新知