![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Функция создаёт объект и возвращает указатель на него. Когда все нужные объекты сделаны, возвращается 0.
Обработка одного объекта не зависит от результата обработки других объектов. Как их можно обработать параллельно? Это сообщение отредактировал(а) User008 - 14.9.2010, 05:02 |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Прежде всего функция next_object() должна быть thread-safe, ну и соответственно учитывать, что к ней идёт обращение из разных потоков. А далее всё просто, что-то вроде:
Цикл будет исполняться параллельно с количеством потоков равным количеству ядер (хотя это зависит от реализации OpenMP, но для Visual C++ это так). -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| User008 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
Не знаю является ли функция thread-safe, поскольку не знаю как это проверить. Но программа в этом месте стала ломаться. А в дебажной версии перед этим появляется сообщение argument to num_threads clause must be positive. |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
|
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Про thread-safe отдельная тема. Тут в одном посте не изложишь. Грубо говоря, если эта функция создаёт объект, то его создание не должно прерываться, а это вполне вероятно в случае многопоточного приложения. Как правильно заметил ув. bsa для этого используются элементы синхронизации, такие как мьютексы и критические секции. По поводу сообщения, поставь просто в скобки вместо вызова omp_get_thread_num() число равное числу твоих ядер (например, 2). Ну и вообще, почитай чтоли про OpenMP и осознай поведения кода в этом месте, а то я же не проверял то, что написал. Это сообщение отредактировал(а) W4FhLF - 14.9.2010, 15:51 -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| User008 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 306 Регистрация: 9.9.2009 Репутация: 1 Всего: 1 |
--
Это сообщение отредактировал(а) User008 - 15.9.2010, 00:58 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |