多线程二维数组输入无法在 C 中使用 pthreads 产生输出

Multithreaded 2d array input failing to produce output using pthreads in C

我创建了代码来创建带线程的 2D table 但它不会 运行 而且我找不到解决这个问题的方法(我是线程的新手,很抱歉我的英语不好)。

#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;
}

我原以为它会要求我提供 2D 的数字 table 但它什么也做不了。

main()returns 时刻,进程结束,OS 拆除属于同一进程的所有其他线程。

有几种方法可以避免这种行为:

  • 通过调用 pthread_join() 加入在 main() 中创建的线程。
  • 通过调用 pthread_exit() 离开 main()
  • 使 main() 阻塞,直到产生的线程通过使用一组条件互斥锁和 status-variables.
  • 完成其工作