C++ openmp中的数据共享

C++ openmp中的数据共享,c++,multithreading,openmp,private,sharing,C++,Multithreading,Openmp,Private,Sharing,在编写多线程程序时,默认情况下是所有线程之间共享内存,需要指定什么是私有的。是否可以将所有数据声明为私有数据 问候,, -你可能想看看Mohd。你可以: #包括 #包括 #包括 int main(int argc,char*argv[]) { 国际贸易署; /*分叉一组线程,给他们自己的变量副本*/ #布拉格omp并行专用(nthreads,tid) { /*获取线程数*/ tid=omp_get_thread_num(); printf(“Hello World from thread=%d\

在编写多线程程序时,默认情况下是所有线程之间共享内存,需要指定什么是私有的。是否可以将所有数据声明为私有数据

问候,,
-你可能想看看Mohd。

你可以:

#包括
#包括
#包括
int main(int argc,char*argv[])
{
国际贸易署;
/*分叉一组线程,给他们自己的变量副本*/
#布拉格omp并行专用(nthreads,tid)
{
/*获取线程数*/
tid=omp_get_thread_num();
printf(“Hello World from thread=%d\n”,tid);
/*只有主线程才能执行此操作*/
如果(tid==0)
{
nthreads=omp_get_num_threads();
printf(“线程数=%d\n”,n个线程);
}
}/*所有线程连接主线程并解散*/
}
但是,您不能用异步消息替换共享数据,因为openmp任务不能保证异步运行:


我想在不指定哪些标识符是私有的情况下执行此操作。我希望可以使用一些命令来执行此(私有数据)声明。。第二种方法是在循环内(即在并行OpenMP指令内)声明变量,而不使用static关键字。您能否对nthreads驻留的位置发表评论?堆栈还是堆?在并行块外部声明的数据类型是共享的(除非它是并行循环中的索引),而在并行块内部声明的数据类型是私有的。请参阅我的答案伟大的链接,谢谢,我想对我的程序执行一些多线程处理,而不需要对代码做太多更改,这似乎是不可能的。发布您尝试并行化的代码(尝试使其可读,不要太长)。
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]) 
{
int nthreads, tid;

/* Fork a team of threads giving them their own copies of variables */
#pragma omp parallel private(nthreads, tid)
  {

  /* Obtain thread number */
  tid = omp_get_thread_num();
  printf("Hello World from thread = %d\n", tid);

  /* Only master thread does this */
  if (tid == 0) 
    {
    nthreads = omp_get_num_threads();
    printf("Number of threads = %d\n", nthreads);
    }

  }  /* All threads join master thread and disband */

}