Точка входа потока вызывается дважды для одного потока в массиве - PullRequest
1 голос
/ 17 апреля 2019

Мне кажется, что процедура ввода вызывается дважды (см. Дублированный thread 3 is waiting в выводе ниже) для одного из потоков, которые я создаю в массиве.Я подозреваю, что это может быть состояние гонки, но не смог это исправить.Я что-то пропустил?

main

pthread_t threads[numthreads];
    fw_t *threadinfo = malloc(sizeof(fw_t) * numthreads);
    int n_thread = file_len / sqrt(numthreads);

    for (int i = 0; i < numthreads; ++i) {
        threadinfo[i].id = i;
        threadinfo[i].n = n_thread;
        printf("i: %i\n", i);
        if (pthread_create(&threads[i], NULL, &fwParallelCommon, (void *)(&threadinfo[i])))
        {
            printf("wasn't able to make the thread :(\n");
        }
    }
    pthread_cond_signal(&cond);

fwParallelCommon

    fw_t *threadinfo = (fw_t *) arg;
    printf("thread %i is waiting\n", threadinfo->id);
    pthread_cond_wait(&cond, &lock);
    printf("created new thread %i\n", threadinfo->id);

Выход

dima@DESKTOP-6PQ42D9:~/dva$ ./fw 4 adj1.txt
4 threads
i: 0
i: 1
thread 0 is waiting
i: 2
thread 1 is waiting
i: 3
thread 2 is waiting
thread 3 is waiting
thread 3 is waiting
...