use*_*601 6 c++ multithreading class datamember
我有一些对象需要在c ++中从不同的线程执行操作.我知道有必要锁定可能同时由多个线程使用的任何变量,但是如果每个线程正在访问(写入)同一对象的不同数据成员,该怎么办?例如,每个线程调用对象的不同方法,并且所调用的方法都不会修改相同的数据成员.只要我不访问相同的数据成员或者我是否需要锁定整个对象,它是否安全?
我四处寻找有关此主题的解释和详细信息,但每个示例似乎都集中在单个变量或非成员函数上.
总结一下:我可以安全地从2个不同的线程访问同一对象的2个不同的数据成员而不会锁定整个对象吗?
它实际上是安全的,但如果经常这样做,会严重降低代码的性能。计算机使用称为“缓存行”的东西,如果两个处理器在同一个缓存行上工作,它们将不得不一直来回传递它,从而减慢您的工作速度。