首页主机资讯C++ std::mutex如何使用

C++ std::mutex如何使用

时间2024-06-26 19:12:03发布访客分类主机资讯浏览491
导读:在C++中,std::mutex用于实现互斥访问共享资源,以避免多个线程同时访问造成的竞争条件。可以通过以下步骤来使用std::mutex: 包含头文件: #include <mutex> 创建std::mutex对象:...

在C++中,std::mutex用于实现互斥访问共享资源,以避免多个线程同时访问造成的竞争条件。可以通过以下步骤来使用std::mutex:

  1. 包含头文件:
#include <
    mutex>
    
  1. 创建std::mutex对象:
std::mutex mtx;

  1. 在需要进行互斥访问的代码块中使用std::lock_guardstd::mutex来锁定mutex:
{
    
    std::lock_guard<
    std::mutex>
     lock(mtx);

    // 访问共享资源的代码
}
    
  1. 当std::lock_guard对象超出作用域时,mutex会自动释放锁。

下面是一个简单的示例,演示了如何使用std::mutex来保护共享资源的访问:

#include <
    iostream>
    
#include <
    thread>
    
#include <
    mutex>
    

std::mutex mtx;
    
int sharedData = 0;


void incrementData() {
    
    std::lock_guard<
    std::mutex>
     lock(mtx);
    
    sharedData++;

}


int main() {

    std::thread t1([](){
    
        for (int i = 0;
     i <
     1000;
 i++) {
    
            incrementData();

        }

    }
    );


    std::thread t2([](){
    
        for (int i = 0;
     i <
     1000;
 i++) {
    
            incrementData();

        }

    }
    );
    

    t1.join();
    
    t2.join();
    

    std::cout <
    <
     "Final value of sharedData: " <
    <
     sharedData <
    <
     std::endl;
    

    return 0;

}
    

在这个示例中,我们创建了一个std::mutex对象mtx来保护共享变量sharedData的访问。两个线程分别调用incrementData函数来增加sharedData的值,由于我们使用了std::lock_guardstd::mutex来锁定mutex,在访问共享资源时会确保只有一个线程能够访问,从而避免竞争条件。最后输出sharedData的最终值。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: C++ std::mutex如何使用
本文地址: https://pptw.com/jishu/684316.html
为什么要用C++ std::mutex C++ std::mutex的性能影响分析

游客 回复需填写必要信息