Почему у людей в головах такой страшный бред?
отсюда
Q. У меня неправильно работает многопоточное приложение, иногда не снимается блокировка с ресурса.
A1, нормальный :Используйте правильный паттерн блокировки с обработкой исключений
A2, от красноглазых психов: Используйте POSIX, потому что микрософтовские поделки глючны и содержат в себе только маркетинговые ходы.
Практика показывает, что в то время, как среди программеров под винду очень много программистов не самого высокого уровня, в силу плавной кривой обучений и низкого порога входа, забабоны программистов под юниксы отличаются таким уровнем разнообразия и неадекватности, что от безумных результатов не спасает даже более высокий их средний уровень.
Q. У меня неправильно работает многопоточное приложение, иногда не снимается блокировка с ресурса.
A1, нормальный :Используйте правильный паттерн блокировки с обработкой исключений
A2, от красноглазых психов: Используйте POSIX, потому что микрософтовские поделки глючны и содержат в себе только маркетинговые ходы.
Практика показывает, что в то время, как среди программеров под винду очень много программистов не самого высокого уровня, в силу плавной кривой обучений и низкого порога входа, забабоны программистов под юниксы отличаются таким уровнем разнообразия и неадекватности, что от безумных результатов не спасает даже более высокий их средний уровень.
no subject
no subject
no subject
no subject
no subject
no subject
В результате исключение выйдет из функции и прибьёт working thread, а с ней и всю программу. Зато мьютекс перед этим разлочили, да.
Разговор (меня, наверное, не поняли) о том, что исключения подходят для ситуаций "проблема возникла здесь, но решать её будем на другом, более высоком уровне. А сейчас - освободим все выделенные локально ресурсы и выйдем из функции". А когда появляются семафоры/мьютексы - работа идёт в нескольких нитях, а нормального механизма обрабатывать исключительные ситуации, которые возникают в "другой" нити - нет.
no subject
В .net точно не помню, вроде бы обработчик исключения по умолчанию показывает сообщение, вне зависимости от потока, где оно возникло, остальные потоки при этом работают.
На самом деле исключения хорошо использовать именно для исключительных ситуаций, когда работу программе лучше не продолжать.
no subject
В результате получается, что если нам нужна гарантия работы программы/устройства, то приходится обрабатывать исключения в месте их возникновения (или максимум - не давать им выходить за пределы кода, с который взаимодействуют другие нити), что сводит их преимущества к нулю.
Но я с этого разговор начинал.
no subject
no subject
no subject
no subject
no subject
no subject
no subject
no subject
Exception handling provides a way of transferring control and information from a point in the execution of a program to an exception handler associated with a point previously passed by the execution
no subject
"не тем, для чего они предназначались (способом обработки ошибок на другом, внешнем уровне), а банальным кодом возврата из функции."
Вообще-то банальный код возврата из функции - это один из способов обработки ошибок на внешнем уровне (на уровне функции, которая вызвала ту функцию).
no subject
no subject
C++ исторически рождался как upgrade для C, который усовершенствует существующие возможности C.
Исключения в C++ - это наследие C-шного setjmp/longjmp. Фамильные следы происхождения можно заметить в этой фразе:
"exception handler associated with a point previously passed by the execution"
Именно так. Обработчик исключений ассоциируется с точкой, которую раньше прошли при исполнении. Это и есть setjump: когда его вызывают, то запоминается место вызова, а потом longjmp-ом происходит скачок туда через сколько угодно уровней. В C++ реализовано фактически то же самое, но намного удобнее.
no subject
И многопоточная обработка с наличием исключений давным давно теоретически обоснована вдоль и поперек, нету там никаких грабель, достаточно следовать заповедям.
no subject
Т.е. жить в идеальном мире, где все - high-skilled developers.
И стек не портится, и память не перетирается, и dead-lock'ов не бывает.
no subject
Вообще, изучение и следование теории спасает от многих видов программистского геморроя, хотя и делает код вида: 10% работы, 90% обработки ошибок, выводов в лог и служебных действий :)
no subject
no subject
no subject