c - 多线程二维数组输入无法使用 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 表的数字,但它不会做任何事情。
解决方案
片刻main()
返回,进程结束,操作系统拆除属于同一进程的所有其他线程。
有几个选项可以避免这种行为:
- 加入
main()
通过调用创建的线程pthread_join()
。 main()
打电话离开pthread_exit()
。main()
使用一组条件互斥体和状态变量,直到线程产生的工作完成它的工作。
推荐阅读
- jenkins - 通过 helm UnknownHostException 部署的 Jenkins 的 DNS 问题:updates.jenkins.io
- javascript - 使用 symfony 迭代 json 数组?
- java - 如何在 Android Studio 上实现更改语言的按钮?
- python - 限制每个用户 django 的投票
- qt - 使用 mousePressEvent/mouseReleaseEvent 启用/禁用小部件
- javascript - 使用 JAVASCRIPT 创建选项卡式内容
- testing - Pact - 合同测试 - 根据合同验证消费者和生产者
- razzle - 如何从 Razzle 中的 Web 模块中排除服务器模块
- assembly - 字节序会影响寄存器中的字节顺序还是仅影响 RAM 中的字节顺序?
- laravel - 为什么我想过滤项目时会出现这个问题