假设我有一个2维矢量二维STL矢量线程安全吗?
vector< vector< int> > v
那么线程1开V [0]操作时,像
v[0].push_back(x)
螺纹2上V [1]操作时,
v[1].remove(y)
等等。
此操作是否线程安全?我想这是因为v[0]
和v[1]
是指向不同内存地址的单独指针?这两个指针是否会最终重叠?
假设我有一个2维矢量二维STL矢量线程安全吗?
vector< vector< int> > v
那么线程1开V [0]操作时,像
v[0].push_back(x)
螺纹2上V [1]操作时,
v[1].remove(y)
等等。
此操作是否线程安全?我想这是因为v[0]
和v[1]
是指向不同内存地址的单独指针?这两个指针是否会最终重叠?
使用Intel提供的concurrent_vector。
v [0]和v [1]是不同的载体,和访问不同的元件时,[]操作者是安全的。 http://www.cplusplus.com/reference/vector/vector/operator[]/ – user234461
但是,由于v [0]和v [1]在内存中是相邻的,因此重复访问它们(我的意思是对象本身不是它们的数据)来自两个不同的线程对于并发性能可能不好。 – user234461
你能解释更多关于并发性能的原因吗?因为它们在缓存中,对于数据局部性来说不好吗? – cxs1031