![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Hohhi |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 25.2.2006 Где: Молдова Репутация: нет Всего: нет |
Добрый день! Не могу разобраться в особенностях программирования потоков. К примеру, из main я запустил 3 потока, затем для запуска 4ого мне нужно подождать завершения всех трех. Я пишу что-то типа:
На самом деле получилось я заменил объединение трех потоков, последовательным объединением их с main. При этом равномерности в работе 3ех потоков ждать не стоит. То есть по теор веру большое время работы с процессором сначала получать первый поток(в зависимости от сложности кода в main между созданием и слиянием потока). Это как то неверно. Гораздо удобнее и семантичнее было бы нечто подобное:
Поправьте, пожалуйста, в рассуждениях Это сообщение отредактировал(а) Hohhi - 26.9.2010, 19:18 |
||||
|
|||||
| iBass |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 22.1.2010 Репутация: нет Всего: нет |
Hohhi, самой собой, так как Join непосредственно не дает выполнения следующих за ним операций, пока поток не завершит исполнение. Я вам советую поместить вашу многопоточность вместе с join в метод, а затем запустить это метод как поток в main, но уже без Join-а
|
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 19 Всего: 36 |
Твой семантичный и, действительно, удачный вариант во фреймворке есть. Используй в каждом потоке AutoResetEvent или ManualResetEvent + WaitHandle.WaitAll(events) снаружи потоков.
Только стоит учесть, что этот метод принимает до 64 (зависит от фреймворка, но не меньше, насколько я знаю) waitHandle'ов. Чтобы обойти это ограничение, или же просто в качестве альтернативы можно использовать счётчик выполненных потоков, не забывая позаботиться о его синхронизации с помощью методов класса Interlocked Это сообщение отредактировал(а) mihryak - 27.9.2010, 03:35 |
|||
|
||||
| Hohhi |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 25.2.2006 Где: Молдова Репутация: нет Всего: нет |
mihryak, попробывал, спасибо
|
|||
|
||||
| userdab |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 3.9.2010 Репутация: нет Всего: нет |
Может еще смоит посмотреть Ручная реализация очереди потоков
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |