2013-11-20 40 views
0

我有一个基本的程序来测试在pthread_create:为什么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循环。这是什么原因?

回答

2

我假定你的意思是你看到SomeFunction的结果(或一些副作用)发生的不是严格按照t的升序排列。

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

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