zoukankan      html  css  js  c++  java
  • 线程安全-临界区

    多个线程有对同一个全局变量进行写的操作时,会出现线程安全问题。

    1,临界区 / 临界资源

    临界资源时一次只允许一个线程使用的资源。

    访问临界资源的那段代码称为临界区。

    临界区实现之线程锁

    如图

    1,创建全局变量,一个全局令牌
    CRITICAL_SECTION cs;//相当于一个令牌,让线程去拿,谁拿到,谁执行代码
    
    2,初始化全局变量
    InitializeCriticalSection(&cs);//初始化令牌
    
    3,实现临界区
    EnterCriticalSection(&cs);
    //to do 使用临界资源
    LeaveCriticalSection(&cs);
    #include <Windows.h>
    
    DWORD global_var;//要在线程中使用的变量,线程会对它有写操作
    CRITICAL_SECTION cs;//相当于一个令牌,让线程去拿,谁拿到,谁执行代码
    
    DWORD WINAPI MyThread1(LPVOID lpParameter)
    {
        DWORD oneCode;
        //ziji de code
        EnterCriticalSection(&cs);
        if(condition(global_var))
        {
            //to do 对 global_var 的写操作
        }
        LeaveCriticalSection(&cs);
        return oneCode;
    }
    DWORD WINAPI MyThread2(LPVOID lpParameter)
    {    DWORD oneCode;
        //ziji de code
        EnterCriticalSection(&cs);
        if(condition(global_var))
        {
            //to do 对 global_var 的写操作
        }
        LeaveCriticalSection(&cs);
        return oneCode;
    }
    
    int main()
    {
        InitializeCriticalSection(&cs);//初始化令牌
        HANDLE hThread1;
        HANDLE hThread2;
        
        hThread1 = CreateThread(NULL,0,MyThread1,NULL,0,NULL);
        hThread2 = CreateThread(NULL,0,MyThread2,NULL,0,NULL);
        
        CloseHandle(hThread1);
        CloseHandle(hThread2);
        return 0;
    }
  • 相关阅读:
    css(上)
    前端基础
    并发编程,python的进程,与线程
    网络编程 套接字socket TCP UDP
    python 类的内置函数2
    python3大特征之多态
    python 类(object)的内置函数
    类 与 继承
    类 与 面向对象
    OOP >>> 封装
  • 原文地址:https://www.cnblogs.com/a-s-m/p/12349986.html
Copyright © 2011-2022 走看看