Исключения в многопоточном приложении. (Нужны идеи.)

Модератор: Модераторы разделов

Аватара пользователя
Zeus
Сообщения: 694

Исключения в многопоточном приложении.

Сообщение Zeus »

Суть такая:
приложение - это движок, которое загружает модули (объекты C++ классов с определённым интерфейсом), связывает их друг с другом и в бесконечном цикле блокируется на мьютексе (два раза вызывает функцию pthread_mutex_lock) - просто чтобы спать, не жрать ресурсы: вся работа происходит в модулях.

Модули могут быть многопоточными, по-крайней мере один из них точно запускает отдельный поток, иначе программа вообще ничего делать не будет.
Модули могут выбрасывать C++ исключения. В т.ч. и в тех своих "отдельных" потоках.

Встаёт вопрос: есть-ли какой-то красивый способ, чтобы:
1. Обработать эти исключения (в самом простом случае - вывести в std::cerr сообщение).
2. Вернуть всю систему в рабочее состояние, т.е. вернуть все потоки в исходное состояние: основной - спит, остальные - работают.
?

Или это фантастика и нужно задуманную структуру переделывать?

P.S. Вот это: http://www.ibm.com/developerworks/linux/li...cep.html#N100C9 читал.
Спасибо сказали:
Аватара пользователя
whirlwind
Сообщения: 67

Re: Исключения в многопоточном приложении.

Сообщение whirlwind »

вот эта фраза вызвала подсознательное невосприятие
Zeus писал(а):
04.09.2008 16:52
и в бесконечном цикле блокируется на мьютексе (два раза вызывает функцию pthread_mutex_lock) - просто чтобы спать, не жрать ресурсы

зачем лишние проблемы? просто бесконечный цикл и все, не отъест он особенно никаких ресурсов. А проблем будет меньше
Добро всегда побеждает зло. Мы победили, значит мы - добро.
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Исключения в многопоточном приложении.

Сообщение Zeus »

whirlwind писал(а):
06.09.2008 18:13
вот эта фраза вызвала подсознательное невосприятие
Zeus писал(а):
04.09.2008 16:52
и в бесконечном цикле блокируется на мьютексе (два раза вызывает функцию pthread_mutex_lock) - просто чтобы спать, не жрать ресурсы

зачем лишние проблемы? просто бесконечный цикл и все, не отъест он особенно никаких ресурсов. А проблем будет меньше

1. 98-99% CPU.
2. Какие проблемы создаёт заблокированный поток?
Спасибо сказали:
Upliner
Сообщения: 67
ОС: openSUSE 11 / Debian Lenny

Re: Исключения в многопоточном приложении.

Сообщение Upliner »

Встаёт вопрос: есть-ли какой-то красивый способ, чтобы:
1. Обработать эти исключения (в самом простом случае - вывести в std::cerr сообщение).
А какие проблемы? Нужно просто в каждой потоковой функции ловить эти исключения. Если модули создают потоки самостоятельно, писателям модулей нужно просто запретить использовать низкоуровневые функции вроде pthread_create и предоставить в движке свои функции для работы с потоками, в которых каждый поток будет запускаться в "обёртке" обработчика исключений.
От Кузбаса и до Затулинки, от вершин до глубиннейших руд
Анархисты Сибирской Республики нас к предельной свободе ведут
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Исключения в многопоточном приложении.

Сообщение Zeus »

Хм... а это мысль!
Спасибо :)
Спасибо сказали: