在多线程程序中,我需要根据线程并行计算的估计值分配共享内存,然后在所有线程上使用该共享内存(在同步之后)。有没有办法在不加入线程和生成新线程的情况下这样做?
为了简化我想要做的事情如下:
我正在使用pthreads
库和pthread_barrier_wait
进行多线程。
答案 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... */
线程将在第一个屏障处等待,直到它们全部完成,然后其中一个将分配所需的内存,并且它们将在第二个屏障等待,直到内存成功分配。