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

标签 c linux multithreading pthreads

我有一个使用 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/

相关文章:

c - 程序启动时出现 SDL_CeateWindow 错误

javascript - 如何使用userAgent识别android和linux用户

python - Pyserial 发送超过一个字节

c# - 应用程序在另一个线程中不会故意崩溃

c# - 如果用不同数量的线程并行调用,为什么会得到不同的总和?

c++ - 获取/释放内存顺序

c++ - 如何在次线性时间内从行优先数组中选择列?

将枚举变量转换为枚举类型

c - 当我尝试将其更改为反转字母顺序时,排序功能会中断吗?

c - 将 C 标准更改为 c99 后使用 UNIX time.h 时出错