线程上下文中的环境变量

Environment variable in a thread context

本文关键字:环境变量 上下文 线程      更新时间:2023-10-16

我有一个程序,让我们称其为调度程序,该计划使用openMP在for for for loop上产生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不同,以便它们可以保留不同的值?

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

其次,每个外壳都有自己的环境(哪个孩子的继承),所以我只是通过GOMP_CPU_BIND的所需值(实际上,您可能是指GOMP_CPU_AFFINITY,因为前者似乎没有记录在任何地方?)命令行参数到script.sh,然后在script.sh中导出GOMP_CPU_AFFINITY,并具有相应的值。

为总结,您会写出类似的内容:

scheduler.sh:

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

script.sh:

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