【问题标题】:c++ How to make sure that my function execute completly before getting killedc ++如何确保我的函数在被杀死之前完全执行
【发布时间】:2014-08-13 06:29:49
【问题描述】:

我有一个在单线程上运行的 C++ 函数。

例如;

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

这个功能需要完全完成。

我想知道,如果有人从任务管理器中终止进程,是否有办法防止应用程序在第 1 行和第 2 行之间中断。

如果 1 执行,那么 2 也必须这样做。

这可能吗?如果可以,实现这一目标的最佳方法是什么?

提前致谢,

【问题讨论】:

  • 想象一下,如果这是可能的。有人可能会认为第 2 行是Sleep(INFINITE)。现在你有一个无法杀死的进程。
  • 它当然是特定于操作系统的。 C++ 最新标准(例如 C++11)不了解 进程(但 C++11 有线程)。

标签: c++ c multithreading function


【解决方案1】:

没有办法做到这一点。如果内核决定你的进程应该死掉,你的进程就会死掉。

【讨论】:

  • 为了完整性,你可以捕捉一些信号,但是如果你想杀死进程,没有什么可以阻止的。
  • 如果是这种情况,如何防止我在两个数据库之间进行交易时出现的错误?
  • 如果它不完整,它应该在两个数据库上回滚。如果要迁移数据,则必须对其进行编码,以便复合事务在两个数据库上都未提交时回滚。
【解决方案2】:

如果第 1 行和第 2 行正在修改某些数据结构。

也许,你需要某种形式的交易机制。

你可以,例如:

  1. 在一个数据库事务中包含第 1 行和第 2 行。

  2. 使第 1 行和第 2 行修改一些临时数据结构, 并使用像 cas 这样的原子指令来临时提交 数据到最终数据结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多