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 */
}