gpt4 book ai didi

c - OpenMP 未显示正确的线程号 - C

转载 作者:行者123 更新时间:2023-11-30 16:57:29 25 4
gpt4 key购买 nike

我有一个简单的程序,它使用 openMP 运行 4 个线程,读取 4 个不同的文本文件并查找字谜。我只是想弄清楚为什么报告的最后一个线程显示的线程号为 26478...我不太明白。函数 countAnagrams 不会对 tid 执行任何操作,它只是在函数运行完毕后将其打印到屏幕上。

下面是我的代码和输出。任何帮助将不胜感激。

#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void countAnagrams(char* fileName, int threadNum);

void main ()
{
char *fileNames[] = {"AnagramA.txt","AnagramB.txt","AnagramC.txt","AnagramD.txt"};
int i;
int tid;
int nthreads = 4;
omp_set_num_threads(nthreads);

#pragma omp parallel
{
#pragma omp sections
{

#pragma omp section
{tid = omp_get_thread_num();
countAnagrams(fileNames[0], tid);}
#pragma omp section
{tid = omp_get_thread_num();
countAnagrams(fileNames[1], tid);}
#pragma omp section
{tid = omp_get_thread_num();
countAnagrams(fileNames[2], tid);}
#pragma omp section
{tid = omp_get_thread_num();
countAnagrams(fileNames[3], tid);}

}
}
}

输出:

Filename: AnagramD.txt
Hello from thread: 1
Number of anagrams: 286
Longest anagram: 8

Filename: AnagramB.txt
Hello from thread: 0
Number of anagrams: 1148
Longest anagram: 8

Filename: AnagramC.txt
Hello from thread: 2
Number of anagrams: 5002
Longest anagram: 8

Filename: AnagramA.txt
Hello from thread: 26478
Number of anagrams: 3184
Longest anagram: 8

最佳答案

导致您出现问题的原因是您在创建并行区域时没有将线程 ID 变量声明为私有(private)。因此,线程在那里互相踩踏,可能会导致垃圾。要解决此问题,请确保所有只能由单个线程访问的变量都声明为 private,如下所示:

#pragma omp parallel private(tid)

关于c - OpenMP 未显示正确的线程号 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39476653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com