Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost thread и переменная внутри 
:(
    Опции темы
mrgloom
Дата 21.9.2011, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Код

for ( std::size_t idx = 0; idx < thcount; ++idx ) 
    {
        tg.create_thread(boost::bind(&task_execute, vec));

    }
tg.join_all();

void task_execute(vector<vector<point>>& vec)


внутри task_execute vec изменяется а по выходу все возвращается в прежнее положение как до вызова тредов.
почему так происходит? я же передаю по ссылке.
PM MAIL   Вверх
azesmcar
Дата 21.9.2011, 12:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Используй boost::ref.

PM   Вверх
mrgloom
Дата 21.9.2011, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



а когда используется ref не производится копирование?

и еще такое ощущение что несколько тредов все равно не могут одновременно читать\записывать в вектор.
потому, что я пробовал с указателем void task_execute(vector<vector<point>>* vec)  были ошибки.
PM MAIL   Вверх
bsa
Дата 21.9.2011, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Цитата(mrgloom @  21.9.2011,  15:28 Найти цитируемый пост)
и еще такое ощущение что несколько тредов все равно не могут одновременно читать\записывать в вектор.
Интересно, а про синхронизацию доступа ты случаем не забыл? Ну там мьютексы, семафоры и пр...

PM   Вверх
azesmcar
Дата 21.9.2011, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(mrgloom @  21.9.2011,  15:28 Найти цитируемый пост)
а когда используется ref не производится копирование?

происходит копирование wrapper-а, сам объект (в данном случае вектор) не копируется.

PM   Вверх
mrgloom
Дата 22.9.2011, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Цитата(bsa @  21.9.2011,  17:51 Найти цитируемый пост)
Цитата(mrgloom @  21.9.2011,  15:28 )
и еще такое ощущение что несколько тредов все равно не могут одновременно читать\записывать в вектор.
Интересно, а про синхронизацию доступа ты случаем не забыл? Ну там мьютексы, семафоры и пр...


ну вот я их как раз не делал. 

Цитата(azesmcar @  21.9.2011,  23:23 Найти цитируемый пост)
а когда используется ref не производится копирование?

происходит копирование wrapper-а, сам объект (в данном случае вектор) не копируется.

ну если у меня гигантский вектор как это скажется на производительности?
т.е. этот wrapper константный что у большого вектора что у маленького и никакой разницы?


ну вообщем пока проблему решил путем разделения входного вектора задач на N векторов( каждому треду по вектору)  и так же каждому треду отдельно передается и выходной вектор  потом после обработки это все сливается в общий.
вообщем не очень красивое решение по памяти.

и ко всем переменным обращаюсь теперь через указатель, или надо использовать ref?

PM MAIL   Вверх
azesmcar
Дата 22.9.2011, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



Цитата(mrgloom @  22.9.2011,  09:21 Найти цитируемый пост)
т.е. этот wrapper константный что у большого вектора что у маленького и никакой разницы?

Wrapper содержит ссылку на твой вектор и его размер не зависит от размера твоего вектора.

Цитата(mrgloom @  22.9.2011,  09:21 Найти цитируемый пост)
ну вот я их как раз не делал. 

ну а чего ты тогда хочешь?

Цитата(mrgloom @  22.9.2011,  09:21 Найти цитируемый пост)
ну вообщем пока проблему решил путем разделения входного вектора задач на N векторов( каждому треду по вектору)  и так же каждому треду отдельно передается и выходной вектор  потом после обработки это все сливается в общий.
вообщем не очень красивое решение по памяти.

Если каждый поток работает с отдельными данными, то в чем тогда проблема? Разделять вектор физически не надо, передавай тот же вектор и передавай индексы первого и последнего элемента, которые поток должен обрабатывать.


Это сообщение отредактировал(а) azesmcar - 22.9.2011, 09:34
PM   Вверх
mrgloom
Дата 22.9.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 8.6.2011

Репутация: нет
Всего: нет



Цитата(azesmcar @  22.9.2011,  09:32 Найти цитируемый пост)
Если каждый поток работает с отдельными данными, то в чем тогда проблема? Разделять вектор физически не надо, передавай тот же вектор и передавай индексы первого и последнего элемента, которые поток должен обрабатывать.

ну ок. с входным вектором тогда понятно.


есть ли какие то готовые решения которые ведут себя по разному в зависимости от того работают потоки с взаимонезависимыми частями (скажем вектора) или с пересекающимися?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0920 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.