我有一个关于try catch机制的问题。类似的代码:关于C++的一些问题try catch
global value default 0;
int thread1()
{
try
{
set global value to 1;
if exception happens
{
jump into catch;
}
set global value to 0;
}
catch
{
......
}
}
int thread2()
{
ASSERT(global value = 0);
}
如果我有假码如图所示,在try块我一个全局值设置为1,然后一个异常发生时,在线程2我有一个ASSERT以测试是否该全局值等于0,那么thread2将显式失败,因为在thread1中,由于异常我们跳入catch块。那么有人可以给我一些解释吗?我不知道如何尝试赶上工程,以防止这种情况。
我假设你显示的代码是* pseudo * code?还要注意,在涉及异常和异常处理时,C,C++和C#是完全不同的语言,并且有自己的语义。哎呀,C甚至没有*例外。 –
另请注意,全局值的设置和读操作必须是原子的。 –
即使发生异常,您想知道如何确保某些代码正在运行('global_value = 0;')? [RAII](http://en.cppreference.com/w/cpp/language/raii)。 – BoBTFish