#pragma omp parallel for for(i=0;i<N;i++) { tempSin = sin(in[i]); tempCos = cos(in[i]); out1[i] = data1[i]*tempSin + data2[i]*tempCos; out2[i] = data1[i]*tempCos + data1[i]*tempSin; }
因为一次循环中sin值和cos值要使用两次,为了减小运算次数,增加了中间变量,这样sin和cos就只需要计算一次了。这时再并行的话,会出现线程不安全吗?
tempSin和tempCos在不同的线程里用的是同一个地址里的内容吗?
看你temp声明在外面还是里面。外面的话就线程不安全了。里面的话是thread local的。
直接double tempSin = sin(x);
From: OpenMP怎么用才是线程安全的?