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";
}