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



我有一个使用 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 createdn");
    /* everybody who calls barrier_wait will wait 
     * until TCOUNT+1 have called it
     */
    pthread_barrier_wait(&b);
    printf("main: children finishedn");
    /* 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: beforen");
    pthread_barrier_wait(b);
    printf("child: aftern");
}
或者

你可以使用屏障,即调用pthread_barrier_wait(在每个线程的例程早期,或在主线程初始化时),以确保每个相关的线程都到达屏障(之后你的一些线程可以做你顽皮的信号技巧)。看到这个问题。

最新更新