根据线程计算分配共享内存
Allocate shared memory based on thread computations
在多线程程序中,我需要根据线程并行计算的估计分配共享内存,然后在所有线程中使用该共享内存(同步后)。有没有办法在不加入线程和产生新线程的情况下做到这一点?
为了简化我正在尝试做如下:
- 16个线程估计并行需要的内存大小
- 声明估计大小的共享内存
- 线程在共享内存上继续执行
我正在使用 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... */
线程将在第一个屏障处等待,直到所有线程都完成,然后恰好其中一个线程将分配所需的内存,并且它们将在第二个屏障处等待,直到内存已成功分配。
在多线程程序中,我需要根据线程并行计算的估计分配共享内存,然后在所有线程中使用该共享内存(同步后)。有没有办法在不加入线程和产生新线程的情况下做到这一点?
为了简化我正在尝试做如下:
- 16个线程估计并行需要的内存大小
- 声明估计大小的共享内存
- 线程在共享内存上继续执行
我正在使用 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... */
线程将在第一个屏障处等待,直到所有线程都完成,然后恰好其中一个线程将分配所需的内存,并且它们将在第二个屏障处等待,直到内存已成功分配。