从线程内的对象调用静态方法
Calling a static method from an object inside a thread
我在类中具有静态功能:
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<>
。至少您免费获得例外安全。
相关文章:
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 如何通过命名空间调用非静态方法
- 调用从模板派生的类的静态方法,而不指定模板
- 如何在 c++ 中异步调用静态方法?
- 从另一个标头中的标头调用静态方法
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- 调用静态方法,收到错误:LNK2019
- 从线程内的对象调用静态方法
- C 调用静态方法
- 从指向实例的指针调用静态方法时出现链接错误
- JNI调用静态方法.类对象是必需的吗
- 正在构造函数中调用静态方法
- 无法在Qt中调用静态方法
- 通过重复对象名称来调用静态方法
- 在最终类中调用静态方法的静态基构造函数的设计模式
- 从C调用静态C++方法在编译时会给出未定义的引用
- 在全局范围内调用静态方法
- 是否可以获得调用静态方法的类
- 在模板类中实现和调用静态方法
- 确保在main()之前调用静态方法