gpt4 book ai didi

c - Pthread 线程创建后立即运行

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:55 25 4
gpt4 key购买 nike

我有一个使用 pthread 的 C 程序。

我希望新创建的线程在创建后立即运行。

这背后的原因是我的线程有初始化代码来设置信号处理程序,我必须确保在我的主线程发送一些信号之前处理程序准备就绪。

我试过在 pthread_create 之后执行 pthread_yield,但没有成功。

我怀疑它有什么不同,但我在 x86_64 上运行 Linux 3.6。

谢谢

最佳答案

如果您的目标是让主线程在继续之前等待所有线程到达同一点,我建议使用 pthread_barrier_wait :

void worker(void*);

int main(int argc, char **argv)
{
pthread_barrier_t b;
pthread_t children[TCOUNT];
int child;

/* +1 for our main thread */
pthread_barrier_init(&b, NULL, TCOUNT+1);

for (child = 0; child < TCOUNT; ++child)
{
pthread_create(&children[child], NULL, worker, &b);
}

printf("main: children created\n");

/* everybody who calls barrier_wait will wait
* until TCOUNT+1 have called it
*/
pthread_barrier_wait(&b);

printf("main: children finished\n");

/* wait for children to finish */
for (child = 0; child < TCOUNT; ++child)
{
pthread_join(&children[child], NULL);
}

/* clean-up */
pthread_barrier_destroy(&b);

return 0;
}

void worker(void *_b)
{
pthread_barrier_t *b = (pthread_barrier_t*)_b;
printf("child: before\n");
pthread_barrier_wait(b);
printf("child: after\n");
}

关于c - Pthread 线程创建后立即运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12536649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com