线程上下文中的环境变量

时间:2014-02-06 17:37:10

标签: c++ multithreading unix

我有一个程序,我们称之为调度程序,它在for循环中使用openmp生成2个线程。像这样:

#pragma omp for num_threads(2)
for (int i = 0; i < 2; ++i) {
    if (omp_get_thread() == 0)
        setenv("VAR", 0);
    else
        setenv("VAR", 1);

    system("./script.sh");
}

脚本执行将取决于VAR值。如何使线程0中VAR的上下文与线程1不同,以便它们可以保持不同的值?

1 个答案:

答案 0 :(得分:0)

首先,除非有真正的原因,否则我会用shell或其他一些脚本语言编写调度程序。使用openmp是一种矫枉过正,fork控制操作符&应该可以正常工作。

其次,每个shell都有自己的环境(子进程继承),所以我只传递GOMP_CPU_BIND的所需值(实际上,你可能意味着GOMP_CPU_AFFINITY,因为前者确实如此似乎没有在任何地方记录?)作为script.sh的命令行参数,然后在GOMP_CPU_AFFINITY中导出具有相应值的script.sh

总而言之,你要写下这样的东西:

<强> scheduler.sh:

 #!/bin/sh
 ./script.sh 1 &
 ./script.sh 2 &

<强> script.sh:

#!/bin/sh
export GOMP_CPU_AFFINITY=$1
./myprog