[多线程]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;
}

 

posted @ 2019-11-07 16:57  Xu_Lin  阅读(272)  评论(0编辑  收藏  举报