yigal_s: (Default)
[personal profile] yigal_s
Интересно, есть ли какие-то вменяемые способы (и какие) писать "exception-safe" code в присутствии аппаратных исключений, т.е. вещей типа SEH исключений Windows или signals Unix-a?

По идее, как раз с использованием этого самого SEH написано ядро Windows, но я не так чтоб его много читал, да и по другим поводам.

Чисто теоретически, транзакционную семантику при наличии потенциального Access-Violation в любом месте кода (скажем, из-за ошибки Memory Manager или даже внешней деаллокации из паралельного треда), мне кажется, написать невозможно. Невозможно, поскольку написание exception-safe кода с транзакционной семантикой базируется на использовании некоторых операций, относительно которых заведомо известно, что они исключений не кидают (не генерируют). Такого рода гарантии возможны для прикладного С++ кода, кидающего "программные" исключения, но никак не для аппаратных исключений, которые могут случиться буквально где угодно.

Остается вопрос, какой же уровень safety и защиту от какого типа ошибок (если не от произвольного Access Violation) можно всё же обеспечить в подобном контексте, и что об этом думают или думали, в частности, разработчики Микрософта.

Date: 2011-11-11 10:57 am (UTC)
From: [identity profile] mediant.livejournal.com
транзакционная семантика "от microsoft" есть оборачивание всего в __try-__except, что потенциально может откатить абсолютно все. ну кроме stack overflow конечно - для этого есть terminate :)