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;
    }
  • 相关阅读:
    Java Web入门二
    Java web入门之Http请求和响应
    Java中的heap和stack
    JSP和Servlet的区别和联系
    MVC设计思想
    Java中int和Integer的区别
    Java使用文件通道复制文件
    Maven项目的pom.xml配置文件格式初识
    面向对象编程思想
    1.struts 防止表单重复提交 2. 拦截器
  • 原文地址:https://www.cnblogs.com/a-s-m/p/12349986.html
Copyright © 2011-2022 走看看