![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Platon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Здравствуйте, уважаемые.
Возникла потребность в написании многопоточного алгоритма поиска в ширину.
Моя недоделанная версия:
DataQueue хранит в себе ArrayBlockingQueue get/add соответствуют take/add Несложное решение, но не хватает одного - как прервать одновременно все потоки по завершение обработки всех объектов данных? В моем коде на это гипотетически способен только DataQueue, но как сделать, я не знаю. Добавлено через 13 минут и 22 секунды как сказал, прямо программистский наркоман!!! Это сообщение отредактировал(а) Platon - 25.9.2008, 06:43 |
||||
|
|||||
| Platon |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
Сам заказал - сам спляшу:
Как обычно я не знаю как это работает (в смысле, синхронизация на додумках и соплях), но работает. Пугает меня метод isDone в классе Producer. Работает он верно, но ответ выдавать не сразу, а только когда поймет, завершена ли работа или нет. Правильно ли так делать? Если думать с точки зрения удобства, считаю, удобно, программисту, разработчику Consumer не надо думать и гадать, как сделать правильное ожидание разрешения ситуации. И я что-то запамятовал, почему этот код работает?
hasNext и get синхронизированы. Но если подумать hasNext могут запросить 2 потока, сначала одному будет сказано, что есть следующий, потом второму будет сказано, что есть следующий, а затем они вдвоем помчатся ловить p.get(), один из них может навечно остаться ждать данных в p.get() Добавлено через 12 минут и 54 секунды Может правильней такая конструкция:
Тоже работает. Это сообщение отредактировал(а) Platon - 25.9.2008, 10:57 |
||||||
|
|||||||
| Platon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
В общем, уважаемые.
Решение написал сам себе. Без проблем принимаю критику.
|
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |