| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > boost thread и переменная внутри |
| Автор: mrgloom 21.9.2011, 12:41 | ||
внутри task_execute vec изменяется а по выходу все возвращается в прежнее положение как до вызова тредов. почему так происходит? я же передаю по ссылке. |
| Автор: azesmcar 21.9.2011, 12:54 |
| Используй http://www.boost.org/doc/libs/1_47_0/doc/html/ref.html. |
| Автор: mrgloom 21.9.2011, 15:28 |
| а когда используется ref не производится копирование? и еще такое ощущение что несколько тредов все равно не могут одновременно читать\записывать в вектор. потому, что я пробовал с указателем void task_execute(vector<vector<point>>* vec) были ошибки. |
| Автор: azesmcar 21.9.2011, 23:23 |
происходит копирование wrapper-а, сам объект (в данном случае вектор) не копируется. |
| Автор: mrgloom 22.9.2011, 09:21 | ||||
ну вот я их как раз не делал.
ну если у меня гигантский вектор как это скажется на производительности? т.е. этот wrapper константный что у большого вектора что у маленького и никакой разницы? ну вообщем пока проблему решил путем разделения входного вектора задач на N векторов( каждому треду по вектору) и так же каждому треду отдельно передается и выходной вектор потом после обработки это все сливается в общий. вообщем не очень красивое решение по памяти. и ко всем переменным обращаюсь теперь через указатель, или надо использовать ref? |
| Автор: azesmcar 22.9.2011, 09:32 | ||||
Wrapper содержит ссылку на твой вектор и его размер не зависит от размера твоего вектора. ну а чего ты тогда хочешь?
Если каждый поток работает с отдельными данными, то в чем тогда проблема? Разделять вектор физически не надо, передавай тот же вектор и передавай индексы первого и последнего элемента, которые поток должен обрабатывать. |
| Автор: mrgloom 22.9.2011, 09:59 | ||
ну ок. с входным вектором тогда понятно. есть ли какие то готовые решения которые ведут себя по разному в зависимости от того работают потоки с взаимонезависимыми частями (скажем вектора) или с пересекающимися? |