多线程二维数组输入无法在 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. 完成其工作
我创建了代码来创建带线程的 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. 完成其工作