我想知道在这种情况下是否需要互斥锁。
我有一个由两个线程操作的向量my_vector
。
主题1:
my_vector.push_back(element)
// send a request for the element, the subject of which thread 2 will receive
// continues
主题2:
// receive element
iter = my_vector.find(element) // This **will** be found in the vector
// do stuff using iter
我的问题是:当线程2使用my_vector
时,线程1可能会向iter
添加更多元素......但是这应该重要吗?如果只将项添加到向量的末尾,那么查看中间元素的迭代器肯定不会受到影响吗?
感谢您对此的任何想法。
答案 0 :(得分:3)
如果在一个线程中访问某个对象而在另一个线程中对象进行了修改,则需要使用锁定。
但这应该重要吗?如果只将项目添加到向量的末尾,那么查看中间元素的迭代器肯定不会受到影响吗?
不要这样理由。它只会带来痛苦。坚持保证工作的东西,而不是做你认为应该工作的事情,因为你无法想到他们可能出错的任何方式。一个明显的例子 - 如果push_back
调整向量大小怎么办?
答案 1 :(得分:0)
最终可能会受到影响。
矢量通过移动内存来工作。每当向内存已满的向量添加元素时,首先将现有元素复制到新分配的更大内存,然后添加元素。然后原始内存被破坏。因此,指向原始内存的任何迭代器都将失效。