• 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;
    }
  • 相关阅读:
    jquery实现下拉框多选
    最好的Angular2表格控件
    CSS3阴影 box-shadow的使用和技巧总结
    存档2
    Python的编码注释# -*- coding:utf-8 -*-
    路由器与交换机区别
    TCP的流量控制
    TCP的拥塞控制
    存储管理之页式、段式、段页式存储
    什么是死锁?其条件是什么?怎样避免死锁?
  • 原文地址:https://www.cnblogs.com/ganxiang/p/13141907.html
Copyright © 2020-2023  润新知