У меня есть функция C++, работающая на одном потоке.
Например;
function()
{
Line 1; commit(ms sql)
Line 2; commit(oracle)
}
Эта функция должна быть полностью завершена.
Я хочу знать, если в случае, если кто-то убьет этот процесс у диспетчера задач, есть способ предотвратить разрыв приложения между строкой 1 и строкой 2.
Если 1 выполняется, то 2 тоже должен это сделать.
Возможно ли это, и если да, то каков наилучший способ достичь этого?
Заранее спасибо,
Невозможно достичь этого. Если ядро решает, что ваш процесс должен умереть, ваш процесс умирает.
если строки 1 и 2 изменяют некоторую структуру данных.
может быть, вам нужна форма транзакции.
вы можете, например:
включают строки 1 и 2 в одной транзакции с базой данных.
make Line 1 и 2 модифицируют временную структуру данных и используют атомную инструкцию типа cas для передачи временных данных в окончательную структуру данных.
Sleep(INFINITE)
. Теперь у вас неубиваемый процесс.