基于线程计算分配共享内存

时间:2017-04-27 01:43:49

标签: c multithreading pthreads pthread-join

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

为了简化我想要做的事情如下:

  1. 16个线程估计并行所需的内存大小
  2. 声明估计大小的共享内存
  3. 线程继续在共享内存上执行
  4. 我正在使用pthreads库和pthread_barrier_wait进行多线程。

1 个答案:

答案 0 :(得分:1)

当然,您已经使用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... */

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