int main(int argc, char **argv) {
int i, j ;
i = 10 ;
j = 2 ; #pragma omp parallel num_threads(nthd), default(none), private(i,j)
i = j ;
j = 3 ; #pragma omp parallel num_threads(nthd), default(none), private(i,j)
i = j ;
j = 4 ; #pragma omp parallel num_threads(nthd), default(none), private(i,j)
i = j ;
return 0 ; }
で、 g++ -O3 -Wall -g ./mp.02d.c -fopenmp
./mp.02d.c: In function void main.omp_fn.0(void*): ./mp.02d.c:17: warning: j is used uninitialized in this function ./mp.02d.c:13: note: j was declared here ./mp.02d.c: In function void main.omp_fn.1(void*): ./mp.02d.c:20: warning: j is used uninitialized in this function ./mp.02d.c:13: note: j was declared here ./mp.02d.c: In function void main.omp_fn.2(void*): ./mp.02d.c:23: warning: j is used uninitialized in this function ./mp.02d.c:13: note: j was declared here
あれ?でも行番は正しいじゃん。
こう書くんじゃ! (スコア:1)
int i, j ;
i = 10 ;
j = 2 ;
#pragma omp parallel num_threads(nthd), default(none), private(i,j)
i = j ;
j = 3 ;
#pragma omp parallel num_threads(nthd), default(none), private(i,j)
i = j ;
j = 4 ;
#pragma omp parallel num_threads(nthd), default(none), private(i,j)
i = j ;
return 0 ;
}
で、
g++ -O3 -Wall -g ./mp.02d.c -fopenmp
./mp.02d.c: In function void main.omp_fn.0(void*):
./mp.02d.c:17: warning: j is used uninitialized in this function
./mp.02d.c:13: note: j was declared here
./mp.02d.c: In function void main.omp_fn.1(void*):
./mp.02d.c:20: warning: j is used uninitialized in this function
./mp.02d.c:13: note: j was declared here
./mp.02d.c: In function void main.omp_fn.2(void*):
./mp.02d.c:23: warning: j is used uninitialized in this function
./mp.02d.c:13: note: j was declared here
あれ?でも行番は正しいじゃん。
それがうれしいが、read とかが re-entrant に処理できないような気がする。信じられないが、複数回 read を発行して読まれた内容が同じときがある。