为什么pthread_create以随机顺序创建线程?

时间:2013-11-20 16:21:26

标签: multithreading

我有一个测试pthread_create的基本程序:

int main (int argc, char *argv[])
{
    pthread_t threads[NUM_THREADS];
    long t;

    for(t=0; t<NUM_THREADS; t++){

        /* TODO assignment 3.2 a) */
        pthread_create(&threads[t], NULL, SomeFunction, t);
//      pthread_join(threads[t], NULL);

    }

    printf("Completed. Exiting\n");
    pthread_exit(NULL);
}

每次我运行它时,它都会以随机顺序创建线程而不考虑for循环。这是什么原因?

1 个答案:

答案 0 :(得分:2)

我认为你的意思是你看到SomeFunction的结果(或某些副作用)不是严格按照t的升序发生的。

根据定义,线程是异步执行的单元,其状态(执行与否)由OS确定。操作系统可以根据需要自由安排线程。除了不存在然后存在之外,您碰巧创建这些线程的顺序不是OS调度程序的“输入”。如果您需要以特定顺序在不同线程中执行某些操作,则必须使用信号量,互斥锁等同步原语手动同步这些线程。

简而言之,这只是“线程的工作方式”。我希望你看到以这种方式创建的线程的结果/副作用的顺序在t方面是有效的非确定性的。