我在下面做錯了什么?代碼將 CPU 固定在 100% 并且沒有結束。好像是無限回圈。幫助表示贊賞。
#include <stdio.h>
int main(void)
{
unsigned long number2;
unsigned long number = 1;
#pragma omp parallel for
for (number = 1; number <= 10000; number )
{
unsigned long max = 0, count = 0;
number2 = number;
while (number2 != 1)
{
if (number2 > max)
max = number2;
if (number2 % 2 == 0)
number2 /= 2;
else
number2 = 3 * number2 1;
count ;
}
}
}
更新:以下作品。
不確定根本原因是什么。本來可以
- 資料型別溢位其邊界,即 int -> unsigned int
- number2 必須是私有的,等等。
#include <omp.h>
int main(int argc, char **argv)
{
unsigned int i;
#pragma omp parallel for
for (i = 1; i < 10000000; i )
{
unsigned int number2 = i; unsigned int max; unsigned int count = 0;
while (number2 != 1)
{
if (number2 > max)
max = number2;
if (number2 % 2 == 0)
number2 /= 2;
else
number2 = 3 * number2 1;
count ;
}
}
}```
uj5u.com熱心網友回復:
在number2共享代碼的第一個版本中,所有執行緒同時訪問/修改它。這是一種資料競爭 ---> 未定義的行為。
uj5u.com熱心網友回復:
解決。
不確定根本原因是什么。本來可以
資料型別溢位其邊界,即 int -> unsigned int
或者必須將 number2 設為私有,等等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348121.html
