我在类中有一个静态函数:
class ABC {
public:
static void calculate()
{
//...
}
};
我有另一个班级:
Class DEF
{
public:
void doCalculation()
{
ABC::calculate();
}
};
类DEF
的对象是每个线程一个,也就是说,我们有n个线程可以同时访问calculate()
。
在这种情况下,我应该锁定通话ABC::calculate()
吗?
答案 0 :(得分:2)
请仔细考虑:锁应该保护数据,而不是代码。如果你教自己在函数调用周围放置锁,那么你将永远进行调试。
解决方案:
calculate()
仅访问静态(不更改)数据,则不需要
完全同步。calculate()
包含共享变量的简单增量
(int / float),使用std::atomic<>
。请注意,原子是方式
比任何竞争锁定都快。calculate()
使用多个变量和/或更大的结构,请考虑使用libguarded。calculate()
确实是访问数据的唯一方法,请使用std::lock_guard<>
。至少你可以免费获得异常安全。