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的执行顺序不确定,所以有两种输出可能:
// 第一种
**********
$$$$$$$$$$
// 第二种
$$$$$$$$$$
********