#include<iostream>
#include<thread>
#include<mutex>
using namespace std;
int a = 0;
mutex mtx1;
void test1() {
for (int i = 0; i < 10000; i++) {
lock_guard<mutex> lg(mtx1);//构造函数进行加锁,析构函数进行解锁
a++;
}
}
int b = 0;
timed_mutex mtx2;
void test2() {
for (int i = 0; i < 2; i++) {
unique_lock<timed_mutex> lg(mtx2,defer_lock);//用法同上,加上defer_lock后需要手动进行加锁
if (lg.try_lock_for(chrono::seconds(2))) {//等待一段时间,如果没有获取互斥量所有权直接返回
this_thread::sleep_for(chrono::seconds(1));
b++;
}
}
}
int main() {
thread t1(test1);
thread t2(test1);
thread t3(test2);
thread t4(test2);
t1.join();
t2.join();
t3.join();
t4.join();
cout << a<<endl;
cout << b << endl;
return 0;
}
多线程之lock_guard和unique_lock
最新推荐文章于 2024-07-13 19:27:27 发布