C++ Locks

std::mutex

mutex是C++中的一个可以加锁的object,加锁和解锁的方式非常简单:

std::mutex mtx;   // 声明一个可加锁的mutex object
mtx.lock();       // 加锁
{
   
    ...           // lock()和unlock()之间的区域称之为critical section
    			  // 每次只有一个线程可以进入这个区域,访问这个区域中的变量,执行这个区域的代码
}
mtx.unlock();     // 解锁

一个简单的mutex使用实例,关于如果使用多线程,可以参考另一篇博文:

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx;

void print_block(int n, char c){
   
	mtx.lock();                  //----------------------
	for(int i = 0; i < n; ++i){
   
		std::cout << c;          // 这一段代码一次只能有一个thread访问
	}
	std::cout << '\n';
	mtx.unlock();                //-----------------------
}

int main(){
   
	std::thread t1(print_block, 10, '*');
	std::thread t2(print_block, 10, '$');
	
	t1.join();
	t2.join();
	
	return 0;
}

由于t1和t2的执行顺序不确定,所以有两种输出可能:

// 第一种
**********
$$$$$$$$$$

// 第二种
$$$$$$$$$$
********
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值