首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线程的最少运行时间

线程的最少运行时间
EN

Stack Overflow用户
提问于 2016-01-12 23:57:20
回答 1查看 90关注 0票数 0

我有一些函数可以检查给定范围内的质数,并将结果输出到文本文件中。该函数还要求用户输入该函数将使用的线程数。

代码语言:javascript
复制
#include "threads.h"
#include <thread>
#include <ctime>

bool isPrime(int n)
{
    if (n == 2)
        return true;

    int i = 2;
    while (i < n)
        if (n % i++ == 0)
            return false;

    return true;
}

void writePrimesToFile(int begin, int end, ofstream& file)
{
    for (int i = (begin % 2 == 0 ? begin + 1 : begin); i <= end; i += 2)
        if (isPrime(i))
            file << i << endl;
}
void callWritePrimesMultipleThreads(int begin, int end, string filePath, int N)
{
    ofstream file(filePath);
    if (file.is_open())
    {
        clock_t time = clock();
        for (int i = 0; i < N; i++)
        {
            int _begin = ((end - begin) / N) * i,
                _end = ((end - begin) / N) * (i + 1);
            thread t(writePrimesToFile, ref(_begin), ref(_end), ref(file));
            t.join();
        }

        cout << "Time elpased: " << (double(clock() - time) / CLOCKS_PER_SEC) << endl;
        file.close();
    }
    else
        cout << "Can't open file!" << endl;
}

主要内容如下:

代码语言:javascript
复制
#include "threads.h"

int main()
{
    callWritePrimesMultipleThreads(0, 1000, "primes.txt", 10);

    return 0;
}

我想知道,对于N的哪个值,线程的数量,程序会运行得最好。

EN

回答 1

Stack Overflow用户

发布于 2016-01-13 01:51:54

这个问题的最佳解决方案是启动N个线程,每个线程运行相同的函数,该线程递增一个共享计数器(使用InterlockedIncrement,以确保线程安全),并计算它是否是质数。

如果这样做,并将N设置为计算机中的核心数量,您将获得最佳的100% CPU消耗,并且上下文切换为零。

关于输出,请注意,在没有锁定的情况下不能安全地写入一个输出文件(这是您想要避免的)。相反,我会将质数收集到一个数组或向量中(每个线程一个向量),并最终将它们合并为一个向量,对它们进行排序,然后写入文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34748220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档