C++ 多線程重點內容

1.C++的線程分類

舉例:假如你要燒水,然後去拉屎,準備杯子,燒水喂老婆喝水,老婆高興了讓你打lol(假設燒水20分鐘。拉屎10分鐘,杯子5分鐘,老婆見不到你的忍耐時間爲25分鐘)

  • 同步阻塞(你只盯着水壺的火,燒開才走,再去拉屎,準備杯子,給老婆倒水)-老婆等了35分鐘-生氣
  • 異步阻塞(水沒有燒好,但是你先拉屎,拉完乾等水燒好,水燒好準備杯子)-老婆等了25分鐘-勉強高興
  • 同步非阻塞(水沒有燒好,不等水燒好便準備杯子,看了15分鐘直播,燒開,拉屎,喂老婆)-老婆等了30分鐘,你看了15分鐘比賽-老婆有點生氣,但是你也沒有虧太多
  • 異步非阻塞(你先燒水放那,然後直接陪老婆,陪老婆的時候準備杯子,水好了拿着杯子倒水,再喂老婆,然後自己去拉屎) -老婆等了0分鐘,決定晚上好好獎勵你

2.一些優化點

  • std::async在多級子函數中調用一定會阻塞,除非你層層的返回furture對象。
  • 真正多級子函數異步非阻塞還得創建線程對象。

3.例子

#include <future>
using namespace std;
#include <thread>
#include <chrono>
#include <iostream>

std::chrono::seconds operator"" _s( unsigned long long t ) ;
inline void sleep_ms(int t){
    std::this_thread::sleep_for( std::chrono::milliseconds(t) ) ;
}

inline void sleep_s(int t){
    std::this_thread::sleep_for( std::chrono::seconds(t) ) ;
}

void test(){
    int index1 = 0;
    while (index1<10){
        std::cout<<"in
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章