The*_*ice 7 c++ multithreading thread-safety c++11
阅读C++ 11草案我对第1.7.3节感兴趣:
存储器位置是标量类型的对象或相邻位域的最大序列,所有这些都具有非零宽度.......两个执行线程(1.10)可以更新和访问单独的存储器位置,而不会相互干扰.
本条款是否可以防止硬件相关的竞争条件,例如:
关于第二点,标准保证那里不会有比赛.话虽这么说,我被告知这种保证并没有在当前的编译器中实现,甚至可能无法在某些架构中实现.
关于第一点,如果第二点得到保证,并且如果你的程序不包含任何竞争条件,那么自然结果是这也不是竞争条件.也就是说,假设标准保证写入不同的子字位置是安全的,那么唯一可能存在竞争条件的情况是多个线程访问同一个变量(在单词之间拆分,或者更多可能是这对于缓存行而言是有问题的).
这可能很难甚至不可能实现.如果未对齐的数据通过缓存行,则几乎不可能保证代码的正确性而不会给性能带来巨大的成本.你应该尽量避免使用未对齐的变量以及其他原因(包括原始性能,对触及两个缓存行的对象的写入涉及将多达32个字节写入内存,以及任何其他线程是否触及任何缓存行,它还涉及缓存同步的成本......
归档时间: |
|
查看次数: |
987 次 |
最近记录: |