【问题标题】:Squaring and multithreading in cc中的平方和多线程
【发布时间】:2016-02-28 07:57:25
【问题描述】:

我正在编写一个程序,该程序使用 8 个线程对 1 到 10000 的数字求平方。我的大部分代码已经编写完毕,但我的问题是如何指定哪些线程对哪些数字求平方。我也是多线程的新手。澄清:

我使用 8 个线程将数字从 1 平方到 100000 并将它们写入文件。打开文件和关闭文件是可以的,但是从每个线程写入每个方块是这里等式的一部分。这是我第一个使用 pthread 的程序,所以我假设您需要告诉每个线程要按顺序平方的数字

理想情况下我想要:

线程 1:1^2

线程 2:2^2

线程 3:3^2

等到 10000...

在我的主函数中,创建函数然后等待线程完成的代码是这样的:

for (i = 0; i < NUMBER_OF_THREADS; i++) {
    printf("Main here. Creating thread %luu\n", i);
    status = pthread_create(&threads[i], NULL, square_root_integer, (void *) i);
    if (status != 0){
        printf("Error: pthread_create returned error code %0ld\n", status);
        exit (-1);
    }
}

for (i = 0; i < NUMBER_OF_THREADS; i++){
    if (pthread_join(threads[i], NULL)){
        printf("Thread %lu failed to join\n",i);
    }
}

线程将运行的 void 函数是这样的:

void *square_integer(void *tid)

所以不知何故,在主函数中,我需要将需要平方的数字传递给“square_integer”函数。

任何帮助都会很棒,如果你们需要更多信息,请告诉我!

【问题讨论】:

  • 你的标题是“平方根”;一些评论说“正方形”。该函数再次显示“平方根”。它是哪一个?您还提到了 8 个线程,但也讨论了 10,000 个线程 - 再说一遍,您在做什么?
  • 抱歉各位,来晚了,我编辑了帖子。我将数字打印到一个文件中,这是我已经编写的代码。我使用 8 个线程将数字从 1 平方到 100000。这是我第一个使用 pthread 的程序,所以我假设您需要告诉每个线程要按顺序平方的数字。

标签: c multithreading square-root


【解决方案1】:

让线程 1 计算数字 1, 1+8, 1+16, 1+24, ...
线程 2 用于数字 2、2+8、2+16、2+24、...、2 + 8*n 、...
线程 3 用于数字 3、3+8、3+16、3+24、...、3 + 8*n、...
等等。

这样所有的数字都被覆盖了,工作在线程之间得到了相当均匀的分布。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多