Ben*_*ear 12 c++ multithreading vector thread-safety
这是一个初学者的问题,我猜,但我找不到这个特定问题的答案:
我有一个大小为10的标准(c ++)向量v并且类型为int.
让一个线程改变所有偶数位置是安全的(v.at(0)= x; v.at(2)= y;等等)和另一个线程改变奇数位置的所有值(v.at( 1)= a; v.at(3)= b;等等)同时?
所以,在这2个线程的生命周期内,不改变大小,没有push_back()等.
如果它不安全,使用数组会更好吗?
谢谢你的帮助.
Jon*_*Jon 11
vector
不提供任何线程安全保证,所以从技术上讲,答案是否定的.
在实践中,你应该能够侥幸逃脱......直到有人(可能是你)在程序的一个角落做出一点改变并且所有地狱都破裂的那一天.在任何非平凡的计划中,我都不会感到很自在.
来自MSDN:标准C++库中的线程安全
对于对同一对象的读取,该对象对于读取是线程安全的:
对于对同一对象的写入,当没有其他线程上的读取器时,该对象对于从一个线程写入是线程安全的
对于同一类的不同对象的读取,该对象是线程安全的读取:
对于对同一个类的不同对象的写入,该对象对于写入是线程安全的:
所以从上面来看,理论上,不,它不会是线程安全的.
它取决于机器.如果你有一个vector<char>
处理器可能无法用单独的单词加载v [i]和v [i + 1].您可能有缓存一致性问题.
编译器和处理器都可能重新排序指令,即使上述内容不适用,也可能会破坏程序.这就是C++ 0x具有内存模型的原因.
归档时间: |
|
查看次数: |
2546 次 |
最近记录: |