【CPP】多线程并发—— Mutex 和 Lock

#include <iostream>  
#include <thread>  
#include <mutex>  
#include "my_utils.h"
  

std::mutex mtx; // 全局互斥锁  
int shared_data = 0; // 共享数据  
  
void increment() {  
    for (int i = 0; i < 10; ++i) {  


        std::cout <<"increment lock_guard: "<<"\n";
        std::lock_guard<std::mutex> lock(mtx); // 在这里锁定互斥锁  
        ++shared_data;  

        std::cout <<"increment: "<<shared_data<<"\n";
        SLEEP_FOR_500_MS();
    }  


    SLEEP_FOR_500_MS();
    for (int i = 0; i < 10; ++i) {  

        std::cout <<"increment lock_guard: "<<"\n";
        std::lock_guard<std::mutex> lock(mtx); // 在这里锁定互斥锁  
        ++shared_data;  
        std::cout <<"increment: "<<shared_data<<"\n";
        SLEEP_FOR_500_MS();
    }  
}  
  
void decrement() {  
    for (int i = 0; i < 10; ++i) {  
        std::cout <<"decrement lock_guard1: "<<"\n";
        std::lock_guard<std::mutex> lock(mtx); // 在这里锁定互斥锁  
        --shared_data;  
                SLEEP_FOR_500_MS();
        std::cout <<"decrement: "<<shared_data<<"\n";
    }  
    for (int i = 0; i < 10; ++i) {  

        std::cout <<"decrement lock_guard2: "<<"\n";
        std::lock_guard<std::mutex> lock(mtx); // 在这里锁定互斥锁  
        --shared_data;  
        SLEEP_FOR_500_MS();
        std::cout <<"decrement: "<<shared_data<<"\n";
    }  
}  
  
int main() {  
    std::thread t1(increment);  
    std::thread t2(decrement);  
  std::cout << "task inited: " << shared_data << std::endl;  
    t1.join();  
    t2.join();  
  
    std::cout << "Final value of shared_data: " << shared_data << std::endl;  
    return 0;  
}

运行结果如下:


increment lock_guard: 
increment: 1
task inited: 1
decrement lock_guard1: 
increment lock_guard: 
increment: 2
increment lock_guard: 
decrement: 1
decrement lock_guard1: 
decrement: 0
decrement lock_guard1: 
decrement: -1
decrement lock_guard1: 
decrement: -2
decrement lock_guard1: 
decrement: -3
decrement lock_guard1: 
decrement: -4
decrement lock_guard1: 
decrement: -5
decrement lock_guard1: 
decrement: -6
decrement lock_guard1: 
decrement: -7
decrement lock_guard1: 
decrement: -8
decrement lock_guard2: 
decrement: -9
decrement lock_guard2: 
decrement: -10
decrement lock_guard2: 
decrement: -11
decrement lock_guard2: 
decrement: -12
decrement lock_guard2: 
decrement: -13
decrement lock_guard2: 
decrement: -14
decrement lock_guard2: 
decrement: -15
decrement lock_guard2: 
decrement: -16
decrement lock_guard2: 
decrement: -17
decrement lock_guard2: 
decrement: -18
increment: -17
increment lock_guard: 
increment: -16
increment lock_guard: 
increment: -15
increment lock_guard: 
increment: -14
increment lock_guard: 
increment: -13
increment lock_guard: 
increment: -12
increment lock_guard: 
increment: -11
increment lock_guard: 
increment: -10
increment lock_guard: 
increment: -9
increment lock_guard: 
increment: -8
increment lock_guard: 
increment: -7
increment lock_guard: 
increment: -6
increment lock_guard: 
increment: -5
increment lock_guard: 
increment: -4
increment lock_guard: 
increment: -3
increment lock_guard: 
increment: -2
increment lock_guard: 
increment: -1
increment lock_guard: 
increment: 0
Final value of shared_data: 0

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值