pthread 编程,线程不会同时 运行

pthread programming, threads don't run simultaneously

我的程序中有以下代码:

for (i = 0; i < numthrs; i++)
{


    if (0 != pthread_create(&thrs[i], NULL, thr_main,
                &args[i]))
    {
        /* handle error */
    }

    printf("thread %d created.\n", i);

    if (0 != pthread_join(thrs[i], &thread_status))
    {
        /* handle error */
    }

    printf("joined thread %d\n", i);
}

但我注意到线程不会同时 运行,第二个线程只有在第一个线程完成执行后才开始执行。我是 pthread 编程的新手。谁能告诉我同时启动多个线程的正确方法是什么?

这是因为您 pthread_join 每个线程在创建后立即创建,即您正在等待线程 n 完成,然后再启动线程 n+1

相反,尝试:

for (i = 0; i < numthrs; i++)
{
    if (0 != pthread_create(&thrs[i], NULL, thr_main,
                &args[i]))
    {
        /* handle error */
    }

    printf("thread %d created.\n", i);
}

for (i = 0; i < numthrs; i++)
{
    if (0 != pthread_join(thrs[i], &thread_status))
    {
        /* handle error */
    }

    printf("joined thread %d\n", i);
}