从线程内的对象调用静态方法

Calling a static method from an object inside a thread

本文关键字:调用 静态方法 对象 线程      更新时间:2023-10-16

我在类中具有静态功能:

class ABC {
  public: 
    static void calculate() 
    {
      //...
    }
};

我还有另一个类:

Class DEF
{
  public:
    void doCalculation()
    {
      ABC::calculate();
    }
};

DEF的对象是每个线程,也就是说,我们有n个线程数,可以同时访问calculate()

在这种情况下,我应该锁定调用ABC::calculate()

请仔细考虑:锁应保护 data ,而不是代码。如果您教自己在功能电话周围锁定锁,您将永远调试。

解决方案:

  • 如果calculate()仅访问静态(不更改(数据,则无需完全同步。
  • 如果calculate()包含共享变量的简单增量(int/float(,使用std::atomic<>。请注意,原子是方式比任何争夺锁定更快。
  • 如果 calculate()使用多个变量布和/或较大的结构,请考虑使用libguarded。
  • 如果calculate()确实是访问数据的唯一方法,请使用std::lock_guard<>。至少您免费获得例外安全。