我们是否需要对C ++中的类的静态成员变量进行静态锁定

use*_*608 0 c++ locking

我有一个静态映射作为类的成员变量。当我们访问此地图时,我们需要静态锁吗?

Joa*_*son 5

如果std::map实例被声明为类静态,则您的锁也必须为类静态。

当锁是一个非静态成员而映射是锁时,请考虑两个线程使用该映射对单独的对象工作。

  • 对象1锁定本地锁并开始处理共享映射。
  • 对象2锁定其本地锁(记住,这是一个单独的锁),并开始操作共享地图。
  • 动臂/崩溃/烧伤

如果该锁是静态类,则这两个对象将共享该锁,并且上述情况将很好地起作用,一次只能锁一个线程。

当然,还有其他无需使用即可共享锁的方法static,但这似乎并不是您要的。