我的多核系统有一个简单的多线程应用程序。这个应用程序有一个并行区域,其中没有线程写入给定的内存地址,但有些可能同时读取。
即使没有使用锁定,是否仍会存在与访问相同内存的多个线程相关联的某种类型的开销或性能损失?如果是这样,为什么?它可以产生多大的影响,可以采取哪些措施?
答案 0 :(得分:1)
这可能取决于所使用的特定缓存同步协议,但是大多数现代CPU支持在多个处理器缓存中共享相同的缓存行,前提是没有对缓存行的写入活动。也就是说,确保将分配与缓存行大小对齐;如果不这样做,正在写入的数据可能与只读数据共享相同的缓存行,从而在其他处理器上刷新脏的缓存行时会导致性能下降(错误共享)。
答案 1 :(得分:0)
我想说不会有。但是,如果您有多个写入相同的引用,则会出现问题。