[多线程]async异步操作的使用实例及不同策略的对比
#include <iostream> #include <thread> #include <mutex> #include <iostream> // std::cout, std::endl #include <future> // std::async, std::future #include <chrono> // seconds using namespace std::chrono; int main() { auto print = [](char c) { for (int i = 0; i < 10; i++) { std::cout << c; std::cout.flush(); std::this_thread::sleep_for(milliseconds(1)); } }; // 不同launch策略的效果 std::launch policies[] = {std::launch::async, std::launch::deferred}; const char *names[] = {"async ", "deferred"}; for (int i = 0; i < sizeof(policies)/sizeof(policies[0]); i++) { std::cout << names[i] << ": "; std::cout.flush(); auto f1 = std::async(policies[i], print, '+'); auto f2 = std::async(policies[i], print, '-'); f1.get(); f2.get(); std::cout << std::endl; } return 0; }
void fun1(char c){ for (int i = 0; i < 5; i++){ cout << c ; std::this_thread::sleep_for(milliseconds(1)); } } void fun2(char c) { for (int i = 0; i < 10; i++) { cout << c ; std::this_thread::sleep_for(milliseconds(1)); } } int main() { auto f1 = std::async(std::launch::async, fun1, '+'); auto f2 = std::async(std::launch::async, fun2, '*'); f1.get(); f2.get(); return 0; }
Talk is cheap. Show me the code