|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
Terminate called without an active exception12.01.2020, 17:16. Показов 33267. Ответов 73
Метки нет (Все метки)
При компиляции такого примера:
Санитайзеры включены: set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") set (CMAKE_LINKER_FLAGS_DEBUG "${CMAKE_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") Но без них врде тоже самое. Что я делаю не так ?
0
|
|||||||
| 12.01.2020, 17:16 | |
|
Ответы с готовыми решениями:
73
Terminate called С++ Ошибка: terminate called after throwing an instance of 'std::bad_alloc'
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 13.01.2020, 09:58 | |
|
squareroot, на самом деле мне кажется я выше дал ясно понять, что ни PTHREAD_CANCEL_ASYNCHRONOUS на общих основаниях, ни tgkill, ни TerminateThread - не являются теми решениями, которые можно назвать хорошими.
Т.е. еще более прямо, если вы будете их централизованно использовать - вы никогда не получите стабильное приложение. Особенно в С++. PTHREAD_CANCEL_ASYNCHRONOUS из всего этого является самым мягким решением, потому что позволяет указать область, где прерывание в произвольном месте делать безопасно. Ваш код не работает скорее всего из-за того, что cancel в современном Linux реализуется через бросок исключения.
0
|
|
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
| 13.01.2020, 14:33 [ТС] | |||
|
Решение должно решать поставленную задачу - завершать исполнение потока без завершения приложения. Как вы считаете, стоит попробовать вариант с tgkill или я могу столкнуться с анологичными побочными эффектами ? И если стоит, то как его лучше реализовать ? Обязательно ли "пробрсывать" tid из нутри в наружу.
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 13.01.2020, 14:49 | ||||
|
Единственный надежный вариант, при условии вероятности зависания - это отказаться от потоков. Добавлено через 6 минут
0
|
||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||
| 13.01.2020, 15:36 [ТС] | |||||
|
Я даже сам писал что тут вопрос торга. Добавлено через 17 минут DrOffset, Я больше склоняюсь к варианту с tgkill, чем к pthread_cancel потомучто если выдвигать требования к процедуре потока, либо не аллоцировать ресурсы динамически, либо не использовать обработчики исключений, то первый вариант создаёт меньше проблем при разработке процедуры потока. Вы так не считаете ? Все необходимые ресурсы можно выделить заранее или вести их учёт из основного потока. Добавлено через 11 минут И ещё непонятно, tgkill, оно вроде не посиксовый. POSIX не даёт инструментов уничтожения потока ? Добавлено через 3 минуты Если дело обстоит именно так, то pthread_cancel можно оставить в качестве говядины второй свежести для нелинуксовых посикс систем.
0
|
|||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||
| 13.01.2020, 17:33 | |||||
|
Добавлено через 45 секунд Добавлено через 1 минуту ![]() Добавлено через 6 минут С конкретно мьютексом все еще проще, он может остаться в нормальном, но залоченном состоянии. Но снаружи вы никак об этом не узнаете. По большом счету вы даже разлочить его не сможете, потому что делать это должен тот же поток, который вызывал lock. А потока этого уже нет. Добавлено через 3 минуты Самое страшное во всем этом: вы можете долгое время не видеть ошибки вообще. Т.е. все как-то так будет складываться, что сброс потока не будет иметь последствий. Это ни что иное, как мина замедленного действия, старательно заложенная вами самим.
0
|
|||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 13.01.2020, 17:39 [ТС] | ||
А кто нам мешаем "запилить" обработчик сигнала SGKILL для потока в качестве сапёра?
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||||||
| 13.01.2020, 17:44 | |||||||
|
Например у вас в потоке вот такая функция выполняется, где-нибудь в цикле:
0
|
|||||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 13.01.2020, 17:55 [ТС] | ||
|
Как разруливать ситуацию и в каком потоке определяется спецификой конкретного приложения. Задача обёртки - проинформировать. Но если никто не мониторит ситуацию аварийного завершения потока, значит заблоченный мьютекс при принудительном завершении потока разработчика конечного приложения не волнует.
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||
| 13.01.2020, 17:58 | ||||||
|
squareroot, вы видимо не поняли, что даже если разработчика волнует залоченный мьютекс - у него нет средств определить нужно ли его разлочить или не нужно.
В этом обработчике не будет никакой возможности узнать, где именно прервали поток
0
|
||||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
| 13.01.2020, 18:04 [ТС] | |
|
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 13.01.2020, 18:12 | ||||
![]() Ну не пишите уж откровенные-то глупости. Допустим try_lock - он работает, потому что мьютекс в коректном залоченном состоянии. Дальше что? Он будет долбиться в него бесконечно, потом unlock имеет право делать только поток, вызвавший lock. Я уж не говорю, про неизвестное, "промежуточное" состояние, когда поток прервали посреди работы функции lock. Вот цитаты из документации Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Это пустой звук для вас?
0
|
||||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
| 13.01.2020, 18:15 [ТС] | |
|
DrOffset, вообще говоря наиболее ожидаемое поведение при принудительном завершении потока это завершение приложения, но не аварийное завершение как в случае pthread_cancel и catch(...) {} а нормальное, с сохранием в логах ошибки из-за которой завершается приложение. Но наверно есть способ справится с залоченным мьютексом системными средствами, если разработчик конечного приложения сделает восстановления после сбоя без завершения приложения.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 13.01.2020, 18:22 | ||
|
Таких ситуаций множество, некоторые можно решить, некоторые нет. Самое страшное, что неизвестно как решать. Было бы гораздо проще, если бы программа точно знала что она делала до завершения. Но знать это нельзя в общем случае, о чем красноречиво пишут в документации.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||
| 13.01.2020, 18:46 [ТС] | |||
|
Даже если допустим поток испльзует сокет и он останется в неизвестном состоянии после завершения потока. Всегда можно спросить файловые хендлы у ОС для данного процесса и по тихому закрыть, те что стали "зомби."
0
|
|||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 13.01.2020, 19:18 | |||
|
А вот вам, раз уж вы пишете SDK - не позволительно слишком оптимистично к этому относиться. Так что смотрите. Добавлено через 17 минут Вообще говоря, я уже проходил ваш путь (только без помощи форумов). Т.е. я исследовал возможности построить стабильную систему с произвольным кодом внутри потоков, с возможностью остановки потоков в случае проблем. Так вот, со всей ответственностью заявляю: в построить такую систему на потоках - нельзя. В частном случае - можно. В общем - нельзя. Собственно я не знаю, для какой задачи вы это пишете. Если для себя, вы, конечно же можете и не узнать о всем спектре проблем. Если для серьезного продакшена, то проблемы возникнут очень скоро. Так что, вы можете, конечно, учиться на своих ошибках, но лучше это делать на чужих.
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
| 13.01.2020, 19:40 [ТС] | |||||||
|
DrOffset, У меня щас недостаточно знаний и опыта чтобы сделать грамотно на уровне процессов, а халтуру делать нехочу и не хочется на этом сильтно зацикливоться.
Завершение потока у меня не получается:
В документации сказано: http://man7.org/linux/man-page... ill.3.html
Добавлено через 9 минут Завершается процесс, а не поток.
0
|
|||||||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 13.01.2020, 20:50 | ||
|
<в примере ошибка, поторопился>
Добавлено через 35 минут
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 13.01.2020, 23:18 [ТС] | ||
|
Добавлено через 45 минут А впрочем я нашёл ответ, что после форка, только один поток остаётся в новом процессе. Выходит поток убить можно через процесс клонирование процесса
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||
| 13.01.2020, 23:20 | ||
|
Для того, чтобы продублировать все потоки есть системный вызов forkall, но я его встречал только в Solaris.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|||||||
| 14.01.2020, 01:15 [ТС] | |||||||
|
DrOffset, А покакой причине санитайзер после форка детектирует утечку памяти ?
Если форк не делать, то санитайзер утечку не фиксирует.
0
|
|||||||
| 14.01.2020, 01:15 | |
|
Не понимаю из-за чего выскакивает: terminate called after throwing instance of std bad_alloc Terminate called after throwing an instance of 'int' Aborted -Ошибка, как быть? Ошибка при повторном запуске: terminate called after throwing an instance of 'std::ios_base::failure' Ошибка при выполнении запроса к mysql (terminate called after throwing an instance of 'sql::SQLException')
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Многофункциональное здание: как одно здание порождает конфликты требований, которые никто не планировал (мат мет мод 29)
anaschu 23.06.2026
Многофункциональное здание:
как одно здание порождает конфликты требований,
которые никто не планировал
Материалы для обсуждения с МГСУ · 2026
Рисунки внутри приложенного ворд файла.
Что за. . .
|
28. Конкретное развертывание плана номер 1 из поста номер 27
anaschu 22.06.2026
Можно ли из модели получить конкретные строительные требования?
Честно — напрямую из текущей модели такие ответы не получить. Но цепочка логики есть, и она не такая длинная.
Где разрыв
. . .
|
27. Планы на разработку функциональных требований к строительству внутри модели пищеблока (или не только его?)
anaschu 22.06.2026
Что уже реализовано и даёт конфликты «бесплатно»
Самый простой конфликт уже работает — конфликт за ресурс-работника. Заданий больше, чем доступных поваров → очередь в queue1. Это прямое отражение. . .
|
26. мед мат модель.Какие типы конфликтов функциональных требований можно рассчитать через ДЕС-моделирование (СМО) в AnyLogic?
anaschu 22.06.2026
Что ДЕС/ СМО умеет считать напрямую:
Конфликты за ресурсы (очереди, узкие места). Несколько типов агентов (повара, учителя, рабочие, пациенты) претендуют на один ресурс (лифт, вход, коридор,. . .
|
|
25 модель здравосохранения и функциональных требований к пищеблоку: конфликты функциональных требований.
anaschu 22.06.2026
Есть ли данные о том, какие функциональные/ эксплуатационные требования или их сочетания труднее всего учитывать при проектировании зданий?
Да, такие данные есть, и они хорошо описаны и в российской,. . .
|
Remote Connection Manager
DevAlt 21.06.2026
Написал для себя небольшую прилагу:
https:/ / github. com/ altbodhi/ ReConMan
По итогу пришел к мысли, что DU не дружат с существующими технологиями.
От сериализации до отображения в реляционную. . .
|
Администрация Хабра удаляет новые энрегоэфективные алгоритмы, которые не западной школы кода, и вовсе никак не сгенерировавны.
Hrethgir 20.06.2026
Делается это, как замечено, при правках - при объявлении концептуальных отличий в алгоримах. Делается это, по линейке событий - после дополнения публикации основными отличиями от основных западных. . .
|
Процесс ориентированная диалектика (не новость - просто системное обновление, философия).
Hrethgir 20.06.2026
Однажды один участник в своём блоге, на этом форуме, сделал запись "О языках замолвите слово". Понимая, что язык - важная вещь, я решил хорошо подумать, прежде чем сказать, и сказал то, что вы видите. . .
|