2013-11-20 3 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); 
} 

Everytime Я побежал, он создает потоки в случайном порядке без учета для цикла. В чем причина этого?

ответ

2

Я предполагаю, что вы имеете в виду, что вы видите результаты (или некоторые побочные эффекты) SomeFunction, происходящие не строго в порядке возрастания t.

Поток, по определению, представляет собой блок асинхронного выполнения, состояние которого (выполняемое или не выполняемое) определяется ОС. OS может свободно планировать потоки по своему усмотрению. Кроме того, что в силу отсутствия и существования существующего порядок, в котором вы создаете эти потоки, не является «входным» для планировщика ОС. Если вам понадобятся вещи в разных потоках в определенном порядке, вам нужно вручную синхронизировать эти потоки с помощью примитивов синхронизации, таких как семафоры, мьютексы и т. Д.

Короче говоря, это просто «способ работы с потоками». Я ожидал бы порядка, в котором вы видели результаты/побочные эффекты потоков, созданных таким образом, чтобы быть эффективно недетерминированными по отношению к t.

Смежные вопросы