如何使用OpenMp动态设置线程数

时间:2016-06-29 05:54:15

标签: c signals openmp

我正在尝试使用OpenMp控制正在运行的线程。我需要的是根据一定的条件设置运行线程的数量。我正在使用信号处理程序来控制线程。我写了以下代码:

#include<stdio.h>
#include<signal.h>
#include<unistd.h>
#include<omp.h>

int i;
int num_threads = 4;

void sig_handler(int signo) {
  if (signo == SIGUSR1) {
    printf("\n receivd signal\n");
    omp_set_num_threads(2);
  } else if (signo == SIGKILL)
    printf("received SIGKILL\n");
  else if (signo == SIGSTOP)
    printf("received SIGSTOP\n");
}

int main(void) {
  i = 0;

  if (signal(SIGUSR1, sig_handler) == SIG_ERR)
    printf("\ncan't catch SIGUSR1\n");

  if (signal(SIGKILL, sig_handler) == SIG_ERR)
    printf("\ncan't catch SIGKILL\n");

  if (signal(SIGSTOP, sig_handler) == SIG_ERR)
    printf("\ncan't catch SIGSTOP\n");

  omp_set_num_threads(num_threads);

  #pragma omp parallel 
  while(1) {
    i++;
    printf("OPENMP USING SIGHANDLER::%d\n",i);
    sleep(1);
  }
  return 0;
}

这里我使用gcc filename.c -o file -fopenmp编译了代码。由于我最初设置了4个线程,我可以看到4个线程在运行。然后在运行时我使用kill -USR1 process_id发出一个信号。这是我的程序接收到信号,之后我必须将线程数从4改为2.但这次我得到了最初的4个线程。我无法改变或控制omp_parallel内部的线程构造。请提出解决方案。

0 个答案:

没有答案