Я пишу приложение, которое блокируется при вводе из двух istreams
.
Чтение из istream
является синхронным (блокирующим) вызовом, поэтому я решил создать два Boost::thread
для чтения.
Любой из этих потоков может перейти к "концу" (на основе некоторого введенного ввода), и как только достигнут "конец", оба входных потока прекращают прием. К сожалению, я не знаю, что будет делать.
Таким образом, я не могу join()
для обоих потоков, потому что только один поток (не может быть предопределен, какой из них) будет фактически возвращать (разблокировать).
Я должен каким-то образом заставить другого выйти, но он заблокирован, ожидая ввода, поэтому сам не может решить, что пришло время возвращаться (переменные условия или что нет).
Это их способ:
- Отправьте сигнал boost:: thread или
- Настроить
istream
на "fail" или - Убейте Boost:: thread?
Примечание:
- Один из
istreams
-cin
- Я пытаюсь перезапустить процесс, поэтому я не могу закрыть входные потоки таким образом, чтобы запретить их повторную передачу.
Edit:
- Я знаю, когда достигнут "конец", и я знаю, какой поток успешно завершен, и который нужно убить. Его убийство мне нужно выяснить (или другую стратегию для чтения из istream).
- Мне нужно, чтобы оба потока были правильно завершены и очищены: (
Спасибо!