是否有可用于c ++的广泛使用的多处理抽象库?

bit*_*cle 5 c++ fork multiprocessing

我来自Python,全力以赴地进入C ++。而且,我最近想到的一个问题是:在C ++中是否有一个广泛使用的开源多处理抽象库?我正在考虑使多处理(ala fork)更易于管理的东西,类似于Python的多处理 stdlib库

我猜没有这样的东西。我完全希望有一个Boost :: Process,就像有一个Boost :: Thread一样

sil*_*jam 1

OpenMP(开放式多处理)是我所知道的http://en.wikipedia.org/wiki/OpenMP上唯一的库——但是它并不像 Python 那样通过创建新进程来处理事情。OpenMP 是一个编译器扩展,受MicrosoftGNU GCC支持。

示例:OpenMP 埃拉托斯特尼筛

// odd-only sieve
int eratosthenesOdd(int lastNumber, bool useOpenMP)
{
  // enable/disable OpenMP
  omp_set_num_threads(useOpenMP ? omp_get_num_procs() : 1);
  // instead of i*i <= lastNumber we write i <= lastNumberSquareRoot to help OpenMP
  const int lastNumberSqrt = (int)sqrt((double)lastNumber);
  int memorySize = (lastNumber-1)/2;
  // initialize
  char* isPrime = new char[memorySize+1];
  #pragma omp parallel for
  for (int i = 0; i <= memorySize; i++)
    isPrime[i] = 1;
  // find all odd non-primes
  #pragma omp parallel for schedule(dynamic)
  for (int i = 3; i <= lastNumberSqrt; i += 2)
    if (isPrime[i/2])
      for (int j = i*i; j <= lastNumber; j += 2*i)
        isPrime[j/2] = 0;
  // sieve is complete, count primes
  int found = lastNumber >= 2 ? 1 : 0;
  #pragma omp parallel for reduction(+:found)
  for (int i = 1; i <= memorySize; i++)
    found += isPrime[i];
  delete[] isPrime;
  return found;
}
Run Code Online (Sandbox Code Playgroud)