| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Поиск в ширину на потоках |
| Автор: Platon 25.9.2008, 06:42 | ||||
| Здравствуйте, уважаемые. Возникла потребность в написании многопоточного алгоритма поиска в ширину.
Моя недоделанная версия:
DataQueue хранит в себе ArrayBlockingQueue get/add соответствуют take/add Несложное решение, но не хватает одного - как прервать одновременно все потоки по завершение обработки всех объектов данных? В моем коде на это гипотетически способен только DataQueue, но как сделать, я не знаю. Добавлено через 13 минут и 22 секунды как сказал, прямо программистский наркоман!!! |
| Автор: Platon 25.9.2008, 10:55 | ||||||
Сам заказал - сам спляшу:
Как обычно я не знаю как это работает (в смысле, синхронизация на додумках и соплях), но работает. Пугает меня метод isDone в классе Producer. Работает он верно, но ответ выдавать не сразу, а только когда поймет, завершена ли работа или нет. Правильно ли так делать? Если думать с точки зрения удобства, считаю, удобно, программисту, разработчику Consumer не надо думать и гадать, как сделать правильное ожидание разрешения ситуации. И я что-то запамятовал, почему этот код работает?
hasNext и get синхронизированы. Но если подумать hasNext могут запросить 2 потока, сначала одному будет сказано, что есть следующий, потом второму будет сказано, что есть следующий, а затем они вдвоем помчатся ловить p.get(), один из них может навечно остаться ждать данных в p.get() Добавлено через 12 минут и 54 секунды Может правильней такая конструкция:
Тоже работает. |
| Автор: Platon 25.9.2008, 18:07 | ||||
| В общем, уважаемые. Решение написал сам себе. Без проблем принимаю критику.
|