zoukankan      html  css  js  c++  java
  • WIN32临界区线程锁EnterCriticalSection和LeaveCriticalSection

    //创建全局变量结构体
    CRITICAL_SECTION cs;
    
    //初始化变量结构体
    InitializeCriticalSection(&cs);    
    
    //循环之前判断是否拿到令牌
    EnterCriticalSection(&cs);    
    
    //代码区
    
    //释放令牌
    LeaveCriticalSection(&cs);
    #include "stdafx.h" 
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    //创建全局变量结构体
    CRITICAL_SECTION cs;
    int i = 10;
    DWORD WINAPI ThreadProc(LPVOID lpParamter)
    {
        while(Sleep(1000),EnterCriticalSection(&cs) ,i>0)
        {
            //EnterCriticalSection(&cs);
            printf("ThreadProc %d 还有 %d 张票\n",lpParamter,i);
            Sleep(500);
            i--;
            printf("ThreadProc %d 卖出 1 张票还剩%d 张票\n",lpParamter,i);
            LeaveCriticalSection(&cs);
        }
        return 0;
    }
    
    DWORD WINAPI ThreadProc1(LPVOID lpParamter)
    {
        //循环之前判断是否拿到令牌
        while(Sleep(1000),EnterCriticalSection(&cs),i>0)
        {
            printf("ThreadProc1还有 %d 张票\n",i);
            //Sleep(2000);
            i--;
            printf("ThreadProc1卖出 1 张票还剩%d 张票\n",i);
            //释放令牌
            LeaveCriticalSection(&cs);
        }
        return 0;
    }
    
    DWORD WINAPI ThreadProc2(LPVOID lpParamter)
    {
        while(Sleep(500),EnterCriticalSection(&cs),i>0)
        {
            printf("ThreadProc2还有 %d 张票\n",i);
            //Sleep(1000);
            i--;
            printf("ThreadProc2卖出 1 张票还剩%d 张票\n",i);
            LeaveCriticalSection(&cs);
        }
        return 5;
    }
    
    int main()
    {
        
        DWORD ThreadId1 = 0;
        DWORD ThreadId2 = 0;
        HANDLE hThread[2];
        DWORD dwr1;
        DWORD dwr2;
        int p1 = 1;
        int p2 = 2;
        //初始化变量结构体
        InitializeCriticalSection(&cs);    
        
        hThread[0] = CreateThread(NULL, 0, ThreadProc1, (LPVOID)p1, 0, &ThreadId1);
        hThread[1] = CreateThread(NULL, 0, ThreadProc2, (LPVOID)p2, 0, &ThreadId2);
        
        WaitForMultipleObjects(2,hThread,TRUE,INFINITE);
    
        CloseHandle(hThread[0]);
        CloseHandle(hThread[1]);
        
        system("pause");
        return 0;
    }
  • 相关阅读:
    08.django之中间件
    07.django之Ajax
    05-Informatica_schema获取元数据
    04-数据库连接启动流程mysql初始化配置文件配置多实例初始化配置文件使用
    javascript设计模式-(八)
    javascript设计模式-(七)
    javascript设计模式-(六)
    javascript设计模式-(五)
    javascript设计模式-(四)
    javascript设计模式-(三)
  • 原文地址:https://www.cnblogs.com/ganxiang/p/13141907.html
Copyright © 2011-2022 走看看