Я пишу код в VS2005, используя его STL.
У меня есть один поток пользовательского интерфейса для чтения вектора и рабочий поток для записи в вектор.
Я использую :: boost :: shared_ptr как векторный элемент.
vector<shared_ptr<Class>> vec;
но я нахожу, если я манипулирую vec в обоих потоках в одно и то же время (я могу гарантировать, что они не посещают одну и ту же область, поток пользовательского интерфейса всегда читает область, содержащую информацию)
vec.clear (), кажется, не может освободить ресурс. проблема произошла в shared_ptr, он не может освободить свой ресурс.
В чем проблема?
Это происходит потому, что, когда вектор достигает своего порядка, он перераспределяется в памяти, тогда исходная часть становится недействительной.
Насколько я знаю, при перераспределении итератор будет недействительным, поэтому некоторые проблемы также возникали, когда я использовал vec [i].
// -----------------------------------------------
Какие виды блокировки нужны?
Я имею в виду: если элемент вектора является shared_ptr, когда поток A получает точку smart_p, другой поток B будет ждать, пока A не завершит операцию на smart_p, верно?
Или просто добавьте блокировку, когда поток пытается прочитать точку, когда операция чтения завершена, поток B может продолжить что-то делать.