使用std::transform实现并发计算

使用std::transform实现并发计算

1.编码

#include <algorithm>
#include <execution>
#include <iostream>
#include <mutex>
#include <thread>
#include <vector>


int main(int argc, char *argv[])
{
    std::vector<int> array;
    for (int i = 1; i <= 100; ++i)
    {
        array.push_back(i);
    }
    std::vector<int> result(array.size());
    // std::execution::seq // 单线程、顺序执行
    // std::execution::par //多个线程上并行执行
    // std::execution::unseq  // 在单线程上执行,但允许编译器进行向量化优化(如使用 SIMD 指令)
    // std::execution::par_unseq // 多个线程上并行执行,并且允许编译器进行向量化优化(如使用 SIMD 指令)
    // 必须保证操作是完全线程安全且无数据竞争,且操作本身是无副作用的(例如不能有中断、异常、依赖于执行顺序等
    std::transform(std::execution::par_unseq, array.begin(), array.end(), result.begin(), [](int x) {
        static std::mutex mutex;
        std::lock_guard<std::mutex> lock(mutex);
        std::cout << std::this_thread::get_id() << " " << x << std::endl;
        return x * 10;
    });
}

2.编译

g++ -std=c++20 main.cpp -ltbb

3.执行输出

7f9c44c96740 1
7f9c44c96740 2
7f9c44c96740 3
7f9c44c96740 4
7f9c44c96740 5
7f9c44c96740 6
7f9c44c96740 7
7f9c44c96740 8
7f9c44c96740 9
7f9c44c96740 a
7f9c44c96740 b
7f9c44c96740 c
7f9c44c96740 d
7f9c44c96740 e
7f9c44c96740 f
7f9c44c96740 10
7f9c44c96740 11
7f9c44c96740 12
7f9c44c96740 13
7f9c44c96740 14
7f9c44c96740 15
7f9c44c96740 16
7f9c44c96740 17
7f9c44c96740 18
7f9c44c96740 19
7f9c44c96740 1a
7f9c44c96740 1b
7f9c44c96740 1c
7f9c44c96740 1d
7f9c44c96740 1e
7f9c44c96740 1f
7f9c44c96740 20
7f9c44c96740 21
7f9c44c96740 22
7f9c44c96740 23
7f9c44c96740 24
7f9c44c96740 25
7f9c44c96740 26
7f9c44c96740 27
7f9c44c96740 28
7f9c44c96740 29
7f9c44c96740 2a
7f9c44c96740 2b
7f9c44c96740 2c
7f9c44c96740 2d
7f9c44c96740 2e
7f9c44c96740 2f
7f9c44c96740 30
7f9c44c96740 31
7f9c44c96740 32
7f9c44c96740 33
7f9c44c96740 34
7f9c44c96740 35
7f9c44c96740 36
7f9c44c96740 37
7f9c44c96740 38
7f9c44c96740 39
7f9c44c96740 3a
7f9c44c96740 3b
7f9c44c96740 3c
7f9c44c96740 3d
7f9c44c96740 3e
7f9c44c96740 3f
7f9c44c96740 40
7f9c44c96740 41
7f9c44c96740 42
7f9c44c96740 43
7f9c44c96740 44
7f9c43ce96c0 4c
7f9c44c96740 58
7f9c44c96740 59
7f9c44c96740 5a
7f9c44c96740 5b
7f9c44c96740 5c
7f9c44c96740 5d
7f9c44c96740 5e
7f9c44c96740 5f
7f9c44c96740 60
7f9c44c96740 61
7f9c44c96740 62
7f9c44c96740 63
7f9c44c96740 64
7f9c44c96740 48
7f9c44c96740 49
7f9c44c96740 4a
7f9c44c96740 4b
7f9c44c96740 46
7f9c44c96740 47
7f9c44c96740 4f
7f9c44c96740 50
7f9c44c96740 51
7f9c44c96740 4e
7f9c43ce96c0 4d
7f9c430e66c0 52
7f9c434e76c0 57
7f9c440ea6c0 45
7f9c41ce16c0 53
7f9c438e86c0 56
7f9c43ce96c0 54
7f9c44c96740 55
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞天遇见妞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值