多线程共享数据线程锁
#include <mutex>;
using namespace std;
// 1.普通的线程锁
mutex lock_mutex;
lock_mutex.lock();
// 锁住值
lock_mutex.unlock();
// 2. lock_guard<mutex> 有效范围内 自动开关锁
mutex mutex_;
void func(){
lock_guard<mutex> lock(mutex_);
// 锁住值
}
// 3. uniqu_lock<mutex> 在lock_guard 的功能基础上更加的灵活
mutex mutex1_;
void func(){
uniqu_lock<mutex> lock(mutex1_);
// 锁住值
}
mutex mutex2_;
void func(){
uniqu_lock<mutex> lock(mutex2_);
// 锁住值
lock.unlock();
// 其他处理
}
mutex mutex3_;
void func(){
// 尝试锁,没有锁上的话执行其他处理
uniqu_lock<mutex> lock(mutex3_,std::try_to_lock);
if(lock.owns_lock){
// 锁住值
}else{
printf(" 没有lock住");
}
}
std::condition_variable 等待一个条件的满足
#include <mutex>;
using namespace std;
mutex mutex_;
std::condition_variable condition;
int a ;
void func(){
lock_guard<mutex> mut(mutex_);
a = 10;
this_thread::sleep_for(chrono::milliesecond(5000));
condition.notify_one(); // 把等待线程唤醒 notify_all() 等待所有线程唤醒
}
void func1(){
lock_guard<mutex> mut(mutex_);
// 返回 false 一直等待
condition.wait(mutex_,[this]{
if(a > 1){
return false;
}
return true;
});
}
网友评论