美文网首页
C++ 线程锁

C++ 线程锁

作者: Vwwwwww | 来源:发表于2020-05-27 21:35 被阅读0次

    多线程共享数据线程锁

    #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;
         });
    }
    

    相关文章

      网友评论

          本文标题:C++ 线程锁

          本文链接:https://www.haomeiwen.com/subject/fnigahtx.html