一个Arithmetic exception的core dump

通常情况下”Program terminated with signal 8, Arithmetic exception.”是除0。
下面抽象代码:

if( 0 != A::counter[i]) {
    val.setLong(A::total[i]/A::counter[i]);
} else  {
    ...
}

total,counter均为全局静态变量,分析发现当前线程内A::counter[i]并非为0,
但在其他线程内开关有对这个清零的操作,应该为线程同步问题,也就是说判断不为0后,
相除计算的时候值被其他线程改变了,除了加锁外,这里的解决办法为拷贝到局部变量后再使用。

0 回复
需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。