c++ - 是否可以多线程同时执行非void函数? (C++)

标签 c++ multithreading function concurrency parallel-processing

假设我有一个对数变换 vector 乘以常数的函数,因此我定义了一个在给定 vector 和常数的情况下进行映射的函数......

vector<double> logtransform(vector<double> &data, int constant){
    vector<double> image;
    for (int i = 0; i < data.size(); i++){
        image.push_back(constant*log(data[i]));
    }
    return image;
}

给定一个名为“data”的 vector ,我需要对包含在 double 组中的不同数量的常量应用函数“logtransform”,但是如果函数不是void类型吗?

最佳答案

使用标准库。从 std::transform 开始并让它工作:

std::vector<double> image(data.size()); // allocate all elements!
std::transform(data.begin(), data.end(), image.begin(),
    [](double val) { return constant*log(val); });

我认为是对的,但我没有测试过。

一旦你让它工作,就并行它:

std::vector<double> image(data.size()); // allocate all elements!
std::transform(std::execution::par,
    data.begin(), data.end(), image.begin(),
    [](double val) { return constant*log(val); });

并行化的唯一更改是添加新的第一个参数 std::execution::par。这需要 C++17。

关于c++ - 是否可以多线程同时执行非void函数? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786999/

相关文章:

PHP:将函数范围限制在当前文件内

c - 为什么在使用指针的函数中更改此数组的值是错误的?

c++ - 如果跨 2 个线程使用,是否值得将 size_t 声明为 std::atomic ?

java - 在实际关闭主线程之前是否总是需要等待每个线程终止?

iphone - iOS 应用未能及时启动 0x000000008badf00d - applicationDidBecomeActive 延迟

c - g_atomic_int_get 保证对另一个线程的可见性?

c++ - std::transform 与 std::reference_wrapper

c++ - 将 QByteArray 转换为 std::vector<unsigned char>

c++ 使用 winmain()

c++ - 如何使用 FILE *fp 调用函数关闭文件