c - 多线程:何时启动和退出线程

标签 c multithreading pthreads

我在 this exercise 上走得更远了一点|并且不确定我是否应该使用更新后的代码发布答案、编辑我的原始帖子或提出新问题。如果我不遵守协议(protocol),请提出建议。

到目前为止我所做的是在输入文件中读取并将所有整数分配给一个数组。然后我将整数总数 (index) 除以线程数 (number_of_threads) 以找到最佳的 numbers_per_thread

然后我创建一个 while 循环来递增数组中的所有数字,根据最佳 numbers_per_thread 分配每个数字 block 。

prob_5.c

#include <stdio.h>

int main(int argc, char *argv[]) {
int i, j;
FILE *fp;
int values[15000];
char line[32];
int index = 0;
int number_of_threads = 10;
int numbers_per_thread;

for (i = 1; i < argc; i++) {
    fp = fopen(argv[i], "r");

    if (fp == NULL) {
        fprintf(stderr, "cat: can't open %s\n", argv[i]);
        continue;
    }

    while (fgets(line, sizeof(line), fp) != NULL && (index < 15000)) {
        sscanf(line, "%d", &values[index]);
        index++;
    }

    fclose(fp);
}

numbers_per_thread = index / number_of_threads;

while (i < index) {
    for (j = 0; (j < numbers_per_thread) && (i < index); j++) {

        i++;
        j++;
    }
}

printf("%d\n", index);

return 0;
}

我对如何处理线程的启动和停止感到困惑。我应该在 for (j = 0; ..) 循环中启动它,然后创建一个 if (j == numbers_per_thread) 来结束线程吗?我应该创建一个新数组来容纳每个线程的数字 block 吗?我想我只是对如何使用 pthread_create、pthread_join 等感到困惑,因为这是我第一次尝试使用它们。

最佳答案

我会制作一个 pthread_t 值数组来存储您创建的每个线程的 ID。在读取值数组后在循环中创建它们,然后立即执行另一个循环以将它们全部连接起来。之后,您可以取各个部分和并将它们加在一起得到最终总和。

关于c - 多线程:何时启动和退出线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7438697/

相关文章:

c - 启动新线程后出现段错误

c - 段中的变量分配

c++ - 如果我在通知的条件变量上调用等待会发生什么

c++ - 在 Cassandra 中使用回调函数

ios - dispatch_async 和异步请求的问题

c - pthread_create创建的线程是否与内核线程相同?

c++ - pthreads_create() 返回非零值?

c - 指针数组求值

c - 数据段前未初始化的可写数据

c - 通过指针而不是值传递值会减慢程序速度吗?