gpt4 book ai didi

c - 让多个线程同时读取文件的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:44 24 4
gpt4 key购买 nike

让多个线程同时读取文件的最佳方式是什么?

例如,如果我告诉我的程序用 4 个线程运行并且文件长 12 个字符,我希望每个线程同时读取 3 个字符。

这是我目前所拥有的:

线程函数:

void *thread(void *arg) {
// can't seem to find the right solution to make it work here...
}

main 函数(thread_count 是线程数,text_size 是文本大小):

// Number of characters each thread should read
uint16_t thread_chars_num = (text_size / thread_count);

pthread_t threads[thread_count];
for (int i = 0; i < thread_count; i++) {
if(i == thread_count - 1) { // last thread might have more work
thread_chars_num += (text_size % thread_count )
}
if (pthread_create(&threads[i], NULL, thread, &thread_chars_num) != 0) {
fprintf(stderr, "pthread_create failed!\n");
return EXIT_FAILURE;
}
}

我正在考虑为线程函数提供一个结构,其中包含用于开始读取的索引和用于停止读取的索引,但这确实令人困惑,我似乎找不到正确的解决方案。

最佳答案

假设你有一个像这样的结构:

struct ft 
{
char* file_name;
int start_index;
int end_index;
};

然后在你的线程中:

void *thread(void *arg) {
int i;
int c;
struct ft* fi = (struct ft*)arg;
FILE* file = fopen(fi->file_name);
fseek (file , fi->start_index, SEEK_SET);
for(i = 0; i < fi->end_index - fi->start_index; i++)
{
c = getc(file);
//do something
}
}

此外,不要忘记在您的主线程中执行 pthread_join,这将使它等待其他线程完成。

关于c - 让多个线程同时读取文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47006013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com