0

我想知道在这种情况下是否需要互斥锁。

我有一个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

我的问题是:线程 1 可能会my_vector在线程 2 使用时添加更多元素iter……但这有关系吗?如果只将项目添加到向量的末尾,那么查看中间元素的迭代器肯定不会受到影响吗?

感谢您对此的任何想法。

4

2 回答 2

3

如果一个对象可以在一个线程中访问而在另一个线程中被修改,则您需要使用锁。

但这有关系吗?如果只将项目添加到向量的末尾,那么查看中间元素的迭代器肯定不会受到影响吗?

不要这样推理。它只会引起痛苦。坚持那些保证有效的事情,而不是做你认为应该有效的事情,因为你想不出任何可能出错的方法。一个明显的例子——如果push_back调整向量的大小怎么办?

于 2013-08-23T01:23:33.700 回答
0

很可能最终会受到影响。

向量通过移动内存来工作。每当您将元素添加到内存已满的向量时,首先将现有元素复制到新分配的更大内存中,然后添加该元素。然后原始内存被破坏。所以任何指向原始内存的迭代器都会失效。

于 2013-08-23T01:24:46.003 回答