4:36p |
программистское -- сами мы не местные. Требуется помощь юникс-гуру Уважаемые юникс-гуру! Слушайте, а как в этих ваших Линуксах обрабатывать нарушения обращения к памяти в мультитредной аппликации?
Ну, допустим, я переопределю обработчк сигнала SIGSEGV. Замечу, не для данного треда, а для всего процесса -- иного не дано.
Далее по идее, я где-то должен вызывать в тредах, которые могут навернуться, sigsetjmp. Чтоб туда откатиться, если мой тред подорвется на обращении к памяти. Проблема, однако, в том, что буфер, в который эта информация прописана должен быть ассоциирован с конкретным тредом. Ну ок, сделаю как нибудь. В thread local storage, да?
Теперь, значица, ко мне влетает сигнал, я ловлю его обработчиком, бегу в свой tls.... оп, а разве я могу обращаться к tls из-под обработчика сигнала? Да я даже свой собственный-то tls не напишу, поскольку даже ожидать на семафоре или мютексе не могу под сигналом. Ну и? Только не говорите мне, что в этом случае нужно писать lock-free имплементацию TLS, хорошо?
Спасите, не дайте разочароваться в Линуксах! |