Многопоточный ввод 2d массива не в состоянии произвести вывод, используя pthreads в C - PullRequest
0 голосов
/ 09 июня 2019

Я создал код для создания 2D-таблицы с потоками, но он не запустится, и я не могу найти решение этой проблемы (я новичок в потоках, и извините за плохой английский).

#include <pthread.h>    
#include <stdio.h>
#include <stdlib.h>

pthread_barrier_t our_barrier;
int done = 2;

void *threadfunc2(void *k) {
    if (done != (int)*(int*)k) {
        int n, d, i, j;
        printf("give the  2d table dimensions \n");
        scanf("%d", &n);    
        scanf("%d", &d);
        int array[n][d];

        for (i = 0; i < n; i++) {
            for (j = 0; j < d; j++) {
                scanf("%d", &array[i][j]);
            }
        }

        for (i = 0; i < n; i++){
            for (j = 0; j < d; j++){
                printf("%d", array[i][j]);
            }
        }

        pthread_barrier_wait(&our_barrier);
        printf("Now finished!!!\n");
        return NULL;
    }
}

int main() {
    int k = 1;
    pthread_t  tid1;
    pthread_create(&tid1, NULL, threadfunc2, (void *)&k);
    return 0;
}

Я ожидал, что он попросит дать цифры для двумерной таблицы, но он ничего не сделает.

1 Ответ

2 голосов
/ 09 июня 2019

В момент возврата main() процесс завершается, и ОС прерывает все другие потоки, принадлежащие тому же процессу.

Существует несколько вариантов, позволяющих избежать этого поведения:

  • Присоединиться к потоку, созданному в main(), вызвав pthread_join().
  • Оставить main(), вызвав pthread_exit().
  • Сделать блок main(), пока созданный поток не заработал.используя набор условных переменных и переменных состояния.
...