0 / 0 / 1
Регистрация: 23.03.2013
Сообщений: 22
|
||||||
1 | ||||||
Использование несколькими потоками одной функции31.08.2013, 21:07. Показов 7859. Ответов 11
Метки нет (Все метки)
Есть вот такая функция для =которую выполняют рабочие потоки
при длительной работе(множестве вставок/удалений)(потоков 50), вылитает. Вопрос почему? И вообще= коректно ли давать множеству потоков одну и ту же рабочую функцию?
0
|
31.08.2013, 21:07 | |
Ответы с готовыми решениями:
11
Генерация случайных чисел несколькими потоками Использование одной пользовательской формы несколькими макросами Многопоточность (использование двумя потоками двух разных элементов одной формы) Работа с несколькими потоками |
Ушел с форума
|
|
31.08.2013, 21:26 | 2 |
Нужен полный код.
Корректно. Каждый поток получит свою копию локальных переменных функции.
0
|
0 / 0 / 1
Регистрация: 23.03.2013
Сообщений: 22
|
||||||
31.08.2013, 22:03 [ТС] | 3 | |||||
вот весь код
0
|
Ушел с форума
|
|
31.08.2013, 22:18 | 4 |
Код, конечно, не сахар. Можете описать, в чем смысл данных вычислений ?
0
|
0 / 0 / 1
Регистрация: 23.03.2013
Сообщений: 22
|
|
31.08.2013, 22:22 [ТС] | 5 |
Основной поток запускает X (1 < X <= 64) вспомогательных потоков. X - первый параметр командной строки.
Каждый из вспомогательных потоков бесконечно (с некоторой изменяющейся задержкой) добавляет в общий контейнер свой элемент. При этом он удаляет самый старый элемент в случае, если тот был добавлен другим потоком или если количество элементов в контейнере > Y ( Y - второй параметр командной строки). Основной поток ожидает любого ввода из командной строки (например нажатия на Enter ). После получения ввода из командной строки основной поток должен распечатать статистику и максимальное зарегистрированное количество элементов в контейнере. командную строку пока не подключал=простой ввод с консоли.
0
|
Ушел с форума
|
|
31.08.2013, 22:36 | 7 |
1
|
0 / 0 / 1
Регистрация: 23.03.2013
Сообщений: 22
|
|
31.08.2013, 22:58 [ТС] | 8 |
проблема с контейнером, он все время ругается на итератор- то его инкрементить нельзя , то декрементить то разименовывать. если в функции порожденных потоков работу с контейнером убрать, работает аж бегом, а так не хочет.
0
|
Ушел с форума
|
|||||||||||
31.08.2013, 23:20 | 9 | ||||||||||
А нельзя ли это все переписать в более простом стиле ?
Например (ПСЕВДОКОД) :
Ну а функция потока могла быть примерно такой:
0
|
0 / 0 / 1
Регистрация: 23.03.2013
Сообщений: 22
|
|
31.08.2013, 23:44 [ТС] | 10 |
ну в общем можно и так, только ,как я понимаю, так будет медленнее работать, так как переходы в методы класса жрут ресурсы процессора.
но в любом случае спасибо, поменяю малость дизайн, а там видно будет.
0
|
31.08.2013, 23:49 | 11 |
0
|
Ушел с форума
|
|
01.09.2013, 10:09 | 12 |
В Visual C++ стандартные функции уже много лет как thread-safe.
Library Support for Multithreading strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l srand функции, как rand, можно без всяких опасений использовать в разных потоках. Гадание на кофейной гуще. Переход в метод класса - это, грубо говоря, один дополнительный call. И код метода запросто может быть встроен по месту вызова. Так что каких-то дополнительных накладных расходов там ноль без палочки. А вот ожидание на объектах ядра (event) - вот это действительно дорогая операция, особенно для сценария с 50 потоками.
0
|
01.09.2013, 10:09 | |
01.09.2013, 10:09 | |
Помогаю со студенческими работами здесь
12
Выигрышь в скорости с несколькими потоками?.. Запись в файл несколькими потоками Закачка файла несколькими потоками. Запись данных в файл несколькими потоками. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |