Обработка сбоя потока [закрыто] ⇐ C++
-
Гость
Обработка сбоя потока [закрыто]
Я искал в Интернете следующий вопрос: Может ли процесс продолжить выполнение, если один из его порожденных потоков выходит из строя в cpp?
Кажется, все ответы предполагают, что это невозможно/может привести к неопределенному поведению (даже после написания обработчика sigsegv), поскольку потоки совместно используют память; или существуют определенные платформы, на которых можно обрабатывать сбои потоков, что делает вашу платформу кода специфичной.
Итак, мои вопросы:
Предположим, у меня есть основной процесс, который порождает n потоков. Каждый из этих потоков не хочет взаимодействовать друг с другом; однако они хотят взаимодействовать с основным процессом.
[*]
Если я сделаю структуры данных, совместно используемые потоками и моим основным процессом, только для чтения; могу ли я в этом случае безопасно обработать сбой потока без каких-либо потенциальных UB?
[*]
Меня беспокоит то, что даже если эти потоки не хотят взаимодействовать друг с другом, все равно существует вероятность того, что поток может попытаться получить доступ к памяти какого-либо другого потока (скажем, ошибка в code), поскольку потоки используют одно и то же адресное пространство. Как мне тогда поступить в этом случае?
[*]
Я могу сделать свою кодовую платформу специфичной (хотя я ограничиваюсь cpp). Какие платформы поддерживают обработку сбоя потока?
[*]
Является ли повреждение памяти из-за сбоя потока единственным, о чем мне следует беспокоиться при обработке сбоя потока? Скажем, я гарантирую, что поток всегда будет обращаться к своей памяти и никогда не будет обращаться к памяти другого потока. Могу ли я безопасно справиться со сбоем в этой теме? Предоставляется ли cpp какая-либо документация или гарантии относительно того, когда я могу безопасно обработать сбой потока?
Примечание. Я знаю, что мне не пришлось бы беспокоиться о недопустимом доступе к памяти, если бы я использовал процессы; но я не хочу использовать процессы.
Заранее спасибо!
Я искал в Интернете следующий вопрос: Может ли процесс продолжить выполнение, если один из его порожденных потоков выходит из строя в cpp?
Кажется, все ответы предполагают, что это невозможно/может привести к неопределенному поведению (даже после написания обработчика sigsegv), поскольку потоки совместно используют память; или существуют определенные платформы, на которых можно обрабатывать сбои потоков, что делает вашу платформу кода специфичной.
Итак, мои вопросы:
Предположим, у меня есть основной процесс, который порождает n потоков. Каждый из этих потоков не хочет взаимодействовать друг с другом; однако они хотят взаимодействовать с основным процессом.
[*]
Если я сделаю структуры данных, совместно используемые потоками и моим основным процессом, только для чтения; могу ли я в этом случае безопасно обработать сбой потока без каких-либо потенциальных UB?
[*]
Меня беспокоит то, что даже если эти потоки не хотят взаимодействовать друг с другом, все равно существует вероятность того, что поток может попытаться получить доступ к памяти какого-либо другого потока (скажем, ошибка в code), поскольку потоки используют одно и то же адресное пространство. Как мне тогда поступить в этом случае?
[*]
Я могу сделать свою кодовую платформу специфичной (хотя я ограничиваюсь cpp). Какие платформы поддерживают обработку сбоя потока?
[*]
Является ли повреждение памяти из-за сбоя потока единственным, о чем мне следует беспокоиться при обработке сбоя потока? Скажем, я гарантирую, что поток всегда будет обращаться к своей памяти и никогда не будет обращаться к памяти другого потока. Могу ли я безопасно справиться со сбоем в этой теме? Предоставляется ли cpp какая-либо документация или гарантии относительно того, когда я могу безопасно обработать сбой потока?
Примечание. Я знаю, что мне не пришлось бы беспокоиться о недопустимом доступе к памяти, если бы я использовал процессы; но я не хочу использовать процессы.
Заранее спасибо!
Мобильная версия