当我在使用Oracle Solaris编译器的自动并行化功能时,我遇到了一个问题。假设我有以下代码:
int var = -1;
int i;
for (i = 0; i < 3; i++){
bool flag = false;
// do operations to set the flag
if (flag == true)
var = i;
}
// do other operations with var
当我运行此代码时,编译器会抱怨由于不安全的依赖而无法并行化。
有谁知道这里可能有什么问题?有没有办法避免这种情况,但保持代码的原始功能?
任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
编译器看到的是一堆循环迭代,所有循环迭代都可以分配给V.如果写入发生是原子的,那么这将获得i的一些随机值,并且有人可能会说这没关系。在假设写入变量不是原子的情况下,大多数编译器将其视为数据竞争......(那么究竟是什么以V结尾?)。因此抱怨。