我正在使用VS2005编写代码,使用其STL功能。 我有一个UI线程用于读取向量,和一个工作线程用于向向量中写入数据。 我使用::boost::shared_ptr作为向量元素。
vector<shared_ptr<Class>> vec;
但我发现,如果我同时在两个线程中操作vec(我可以保证它们不会访问相同的区域,UI线程总是读取具有信息的区域)
vec.clear()似乎无法释放资源。问题出现在shared_ptr上,它无法释放其资源。
问题是什么? 这是因为当向量达到其顺序容量时,它会重新分配内存,然后原始部分将无效。
据我所知,当重新分配时,迭代器将无效,为什么使用vec[i]时也会出现一些问题。 //-----------------------------------------------
需要什么样的锁? 我的意思是:如果向量的元素是shared_ptr,当线程A获取指针smart_p时,另一个线程B将等待直到A完成对smart_p的操作,对吗? 还是只需在线程尝试读取点时添加锁定,当读取操作完成时,线程B可以继续执行某些操作。