C++多線程lock_guard


lock_guard可以簡化lock/unlock的寫法,同時也更安全,因為lock_guard在構造時會自動鎖定互斥量,而在退出作用域后進行析構會自動解鎖,從而保證了互斥量的正確操作,避免忘記unlock操作,因此,應盡量用lock_guard。lock_guard用到了RAII技術,這種技術在類的構造函數中分配資源,在析構函數中釋放資源,保證了資源在出了作用域之后就釋放。

#include <iostream>
#include <string>
#include <condition_variable>
#include <mutex>



void IncreaseWithLockGuard(int *value,std::mutex *m3x){
    for (int i = 0; i < 10000; ++i) {
        std::lock_guard<std::mutex> lock(*m3x);
        *value+=1;
    }
}

void IncreaseWIthLockUnlock(int *value,std::mutex *m3x){
    for (int i = 0; i < 10000; ++i) {
        m3x->lock();
        *value+=1;
        m3x->unlock();
    }
}

int main(int argc, char *argv[]) {
    mutex m3x;
    int value = 0;
    thread th0(IncreaseWithLockGuard,&value,&m3x);
    thread th1(IncreaseWithLockGuard,&value,&m3x);
    th0.join();
    th1.join();
    cout << "value:" << value << endl;
    return 0;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM