zoukankan      html  css  js  c++  java
  • C++基础-死锁和解锁(g_mutex.lock(), g_mutex.unlock())

    当多个函数操作同一个锁时,锁住一个变量时要尽快解锁,不要同时锁住一个相同的变量,这时就容易发生死锁的情况

    //
    // Created by Administrator on 2021/7/2.
    //
    #include<iostream>
    #include<mutex>
    #include<thread>
    
    using namespace std;
    //thread引用类型函数,模板,避免类型转换,尽量指针
    //锁住一个变量以后,要尽快解锁,不要锁住其他变量
    #define COUNT 1000000
    
    
    mutex g_mutex1, g_mutex2; //互斥量
    
    void add1(int *p1, int *p2)
    {
        for(int i = 0; i < COUNT; ++i)
        {
    //        g_mutex1.lock();
    //        g_mutex2.unlock();
    //        (*p1)++;
    //        g_mutex2.unlock();
    //        g_mutex1.lock();
    //        (*p2)++;
    
            g_mutex1.lock();
            (*p1)++;
            g_mutex1.unlock();
            g_mutex2.lock();
            (*p2)++;
            g_mutex2.unlock();
    
    
        }
    }
    
    void add2(int *p1, int *p2)
    {
    
        for(int i = 0; i < COUNT; ++i)
        {
    //        g_mutex2.lock();
    //        g_mutex1.unlock();
    //        (*p1)++;
    //        g_mutex1.unlock();
    //        g_mutex2.lock();
    //        (*p2)++;
            g_mutex2.lock();
            (*p2)++; //计算完解锁
            g_mutex2.unlock();
            g_mutex1.lock();
            (*p1)++;
            g_mutex1.unlock();
        }
    }
    
    int main()
    {
        int a = 0;
        int b = 0;
    
        thread th1(add1, &a, &b);
        thread th2(add2, &a, &b);
    
        th1.join();
        th2.join();
    
        while(1)
        {
            cout << a << endl;
            cout << a << endl;
            this_thread::sleep_for(chrono::seconds(3));
        }
    //    th1.join();
    //    th2.join();
        cout << a << endl;
        cout << a << endl;
        cin.get();
    }
  • 相关阅读:
    Lombok——一款Java构建工具,“懒人”必备!!(idea版)
    HTML——列表标签
    HTML——超链接<a>
    python 数据写入json文件时中文显示Unicode编码问题
    Spring——Bean的作用域
    过程与函数
    异常错误处理
    游标变量的使用
    =>符号的意义
    游标的使用
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/14965338.html
Copyright © 2011-2022 走看看