我有一种情况,我不得不使用黑盒包装器进行多线程处理(我怀疑它位于 TBB 线程池的顶部)。
我有一个只能由具有昂贵构造函数的对象获得的值,并且每个线程都需要一个本地实例,这没关系。该对象将产生一个值,该值保证跨线程始终相同(所有构造函数从主循环中获取相同的 const 形成参数)。每个线程还可以访问该参数的共享结构并保存一些结果。
线程所需的有问题的值(无符号整数形式的迭代范围)稍后在主循环中使用,所以如果我可以的话,我宁愿不创建上述对象的另一个昂贵的实例来获得相同的再值。
我的问题是,在带有 VC11 的 Windows 和带有 GCC 4.8.2 的 Linux 上,在 x86-64 上,正在将相同的值从多个线程写入相同的内存位置(线程具有指向的结构中的 int),这是一种良性竞争? 这是一场我可以让比赛发生而不用昂贵的锁来保护价值的比赛吗?从粗略的测试来看,情况似乎是这样,但我不完全确定该操作是否在幕后是原子的和安全的,或者是否有可能在压力下出现腐败。