编写一个C++程序,创建多个线程同时读取同一个csv文件中的不同行内容
时间: 2024-05-03 20:21:25 浏览: 139
以下是一个可以实现该功能的C程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define MAX_LINE_LENGTH 1000
void *read_csv(void *arg);
int main(int argc, char **argv) {
if (argc < 2) {
printf("Please specify the csv file to read.\n");
exit(1);
}
FILE *csv_file = fopen(argv[1], "r");
if (csv_file == NULL) {
printf("Unable to open file %s.\n", argv[1]);
exit(1);
}
pthread_t threads[10]; // 创建10个线程
int thread_args[10]; // 每个线程读取的行号
for (int i = 0; i < 10; i++) {
thread_args[i] = i + 1;
pthread_create(&threads[i], NULL, read_csv, &thread_args[i]);
}
for (int i = 0; i < 10; i++) {
pthread_join(threads[i], NULL);
}
fclose(csv_file);
return 0;
}
void *read_csv(void *arg) {
int row = *(int *) arg;
char line[MAX_LINE_LENGTH];
FILE *csv_file = fopen("data.csv", "r");
if (csv_file == NULL) {
printf("Unable to open file.\n");
pthread_exit(NULL);
}
for (int i = 0; i < row; i++) {
if (fgets(line, MAX_LINE_LENGTH, csv_file) == NULL) {
printf("Reached end of file.\n");
break;
}
}
printf("Thread %ld read row %d: %s", pthread_self(), row, line);
fclose(csv_file);
pthread_exit(NULL);
}
```
该程序读取一个名为"data.csv"的csv文件,创建了10个线程,每个线程读取不同的行号。read_csv()函数是每个线程执行的函数,它接收一个整数参数,代表要读取的行号。每个线程打开文件,读取指定行号的内容,然后输出到控制台。最后,主线程等待所有线程完成后关闭文件并退出程序。
需要注意的是,该程序没有对文件进行任何的并发控制,因此可能会出现多个线程同时读取同一行的情况。如果需要保证每个线程读取不同的行内容,可以使用互斥锁或其他并发控制机制来避免竞争条件。
阅读全文