C ++ Как убедиться, что моя функция выполняется полностью, прежде чем убить

0

У меня есть функция C++, работающая на одном потоке.

Например;

function()
{
 Line 1; commit(ms sql) 
 Line 2; commit(oracle)
}

Эта функция должна быть полностью завершена.

Я хочу знать, если в случае, если кто-то убьет этот процесс у диспетчера задач, есть способ предотвратить разрыв приложения между строкой 1 и строкой 2.

Если 1 выполняется, то 2 тоже должен это сделать.

Возможно ли это, и если да, то каков наилучший способ достичь этого?

Заранее спасибо,

  • 3
    Представьте, если бы это было возможно. Кто-то может решить, что строка 2 является Sleep(INFINITE) . Теперь у вас неубиваемый процесс.
  • 0
    Это, безусловно, зависит от операционной системы. Последние стандарты C ++ (например, C ++ 11) не знают о процессах (но в C ++ 11 есть потоки).
Теги:
multithreading
function

2 ответа

8
Лучший ответ

Невозможно достичь этого. Если ядро решает, что ваш процесс должен умереть, ваш процесс умирает.

  • 2
    Для полноты вы можете поймать некоторые сигналы, но если вы хотите убить процесс, ничто не мешает этому.
  • 0
    Если это так, как предотвратить ошибку при транзакциях между двумя базами данных?
Показать ещё 1 комментарий
0

если строки 1 и 2 изменяют некоторую структуру данных.

может быть, вам нужна форма транзакции.

вы можете, например:

  1. включают строки 1 и 2 в одной транзакции с базой данных.

  2. make Line 1 и 2 модифицируют временную структуру данных и используют атомную инструкцию типа cas для передачи временных данных в окончательную структуру данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню