Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рассуждения о Join(), Эффективность расписания 
:(
    Опции темы
Hohhi
Дата 26.9.2010, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый день! Не могу разобраться в особенностях программирования потоков. К примеру, из main я запустил 3 потока, затем для запуска 4ого мне нужно подождать завершения всех трех. Я пишу что-то типа:
Код

thread1.Join():
thread2.Join();
thread3.Join();


На самом деле получилось я заменил объединение трех потоков, последовательным объединением их с main. При этом равномерности в работе 3ех потоков ждать не стоит. То есть по теор веру большое время работы с процессором сначала получать первый поток(в зависимости от сложности кода в main между созданием и слиянием потока). Это как то неверно. Гораздо удобнее и семантичнее было бы нечто подобное:
Код

ActiveThread.Wait(thread1,thread2,thread3)


Поправьте, пожалуйста, в рассуждениях

Это сообщение отредактировал(а) Hohhi - 26.9.2010, 19:18
PM MAIL ICQ   Вверх
iBass
Дата 26.9.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Hohhi, самой собой, так как Join непосредственно не дает выполнения следующих за ним операций, пока поток не завершит исполнение. Я вам советую поместить вашу многопоточность вместе с join в метод, а затем запустить это метод как поток в main, но уже без Join-а  
PM MAIL   Вверх
mihryak
Дата 27.9.2010, 03:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Твой семантичный и, действительно, удачный вариант во фреймворке есть. Используй в каждом потоке AutoResetEvent или ManualResetEvent + WaitHandle.WaitAll(events) снаружи потоков.
Только стоит учесть, что этот метод принимает до 64 (зависит от фреймворка, но  не меньше, насколько я знаю) waitHandle'ов. Чтобы обойти это ограничение, или же просто в качестве альтернативы можно использовать счётчик выполненных потоков, не забывая позаботиться о его синхронизации с помощью методов класса Interlocked

Это сообщение отредактировал(а) mihryak - 27.9.2010, 03:35
PM MAIL ICQ   Вверх
Hohhi
Дата 27.9.2010, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



mihryak, попробывал, спасибо
PM MAIL ICQ   Вверх
userdab
Дата 27.9.2010, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Может еще смоит посмотреть Ручная реализация очереди потоков
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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