根据线程计算分配共享内存

Allocate shared memory based on thread computations

在多线程程序中,我需要根据线程并行计算的估计分配共享内存,然后在所有线程中使用该共享内存(同步后)。有没有办法在不加入线程和产生新线程的情况下做到这一点?

为了简化我正在尝试做如下:

  1. 16个线程估计并行需要的内存大小
  2. 声明估计大小的共享内存
  3. 线程在共享内存上继续执行

我正在使用 pthreads 库和 pthread_barrier_wait 进行多线程处理。

当然,您已经在 pthread_barrier_wait() 的正确轨道上了。将屏障初始化为 16,然后让线程函数执行:

/* ...Work on estimated memory size... */

if (pthread_barrier_wait(&barrier) == PTHREAD_BARRIER_SERIAL_THREAD)
{
    /* ...Allocate the shared memory... */
}

pthread_barrier_wait(&barrier);

/* ...Continue execution using shared memory... */

线程将在第一个屏障处等待,直到所有线程都完成,然后恰好其中一个线程将分配所需的内存,并且它们将在第二个屏障处等待,直到内存已成功分配。