首页 > 解决方案 > 多线程二维数组输入无法使用 C 中的 pthreads 生成输出

问题描述

我创建了代码来创建一个带有线程的 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;
}

我希望它会要求我提供 2D 表的数字,但它不会做任何事情。

标签: cmultithreadingpthreads

解决方案


片刻main()返回,进程结束,操作系统拆除属于同一进程的所有其他线程。

有几个选项可以避免这种行为:

  • 加入main()通过调用创建的线程pthread_join()
  • main()打电话离开pthread_exit()
  • main()使用一组条件互斥体和状态变量,直到线程产生的工作完成它的工作。

推荐阅读