C++ 线程锁

2020-05-27  本文已影响0人  Vwwwwww

多线程共享数据线程锁

#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;
     });
}
上一篇 下一篇

猜你喜欢

热点阅读