C++11 异步并发

C++11 异步并发

#include<iostream> // 标准输入输出流
#include<thread> // 多线程
#include<memory> // 内存安全
#include<mutex> // 信号量
#include<queue>
#include<algorithm>  
#include<condition_variable>
#include<functional>
#include<future>


// 生成 32 位真随机数(Intel RDRAND)
#include <immintrin.h>
uint32_t rdrand() {
    unsigned int r;
    while (!_rdrand32_step(&r));
    return r;
}

// uint32_t 生成 [min, max-1] 范围的随机数
uint32_t rdrand_range(uint32_t min, uint32_t max) {
    if (min > max) std::swap(min, max);    
    return rdrand() % (max-min) + min;
}

int func(){
    int result = 0;
    for(int i=0; i<10; i++) result += (int)rdrand_range(1, 1000);
    std::this_thread::sleep_for(std::chrono::milliseconds((int)rdrand_range(1, 5000)));

    return result/1;
}

void funcPrms(std::promise<int> f){
    f.set_value((int)rdrand_range(1, 1000));
}

int main(){
    std::future<int> future_result = std::async(std::launch::async, func);

    std::cout<<"async: "<<future_result.get()<<"\n";

    // async 底层:
    std::packaged_task<int()> task(func);
    std::future<int> future_result2 = task.get_future();
    std::thread(std::move(task)).join();
    std::cout<<"async2: "<<future_result2.get()<<"\n";

    std::cout<<func()<<" main\n";

    std::promise<int> numPrms;
    auto promis = numPrms.get_future();

    std::thread t2(funcPrms, std::move(numPrms));
    t2.join();
    std::cout<<promis.get()<<"\n";
    
}

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...