21xrx.com
2024-09-19 23:56:35 Thursday
登录
文章检索 我的文章 写文章
C++ 多个类共用同一把锁
2023-07-01 07:31:58 深夜i     --     --
C++ 共用

在C++编程中,经常需要在多个线程之间共享数据或访问资源。在这种情况下,需要使用锁来保证线程安全。通常情况下,每个类都需要有自己的锁来控制并发访问。但是,有时候多个类需要访问同一个资源,这时候就需要多个类共用同一把锁。

实现多个类共用同一把锁的方法是,在这些类中声明一个静态锁对象,然后所有需要共享访问的成员函数都使用这个静态锁对象来加锁。这样,不同的类实例使用同一个静态锁对象,就可以保证数据的安全。

下面是一个示例代码,演示了多个类如何共用同一把锁:


#include <iostream>

#include <mutex>

std::mutex g_lock;

class A

{

public:

  void foo()

  {

    std::lock_guard<std::mutex> lock(g_lock);

    // 代码块

  }

};

class B

{

public:

  void bar()

  {

    std::lock_guard<std::mutex> lock(g_lock);

    // 代码块

  }

};

int main()

保证数据的安全

在上面的代码中,类A和类B共用了g_lock这个静态锁对象,它被定义为std::mutex类型。在A和B的成员函数foo()和bar()中,都使用了std::lock_guard来加锁,从而保证了多个线程之间的数据安全。

总结来说,使用多个类共用同一个锁需要注意以下几点:

1. 静态锁对象的声明应该放在所有类的声明之前。

2. 所有需要访问共享资源的成员函数都应该使用同一个静态锁对象进行加锁。

3. 在实际使用时,需要注意锁的占用时间,尽量减少锁的占用时间,以提高程序的性能。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复