c 11多執行緒課堂筆記

2021-10-09 04:56:15 字數 1898 閱讀 5699

4)諸如 int* a ;* a = 1; char * a; * a = 『a』;這種寫法是錯的,空位址不能賦值

5)char * aa =(char*)「asd」;這是可以的

6)student s4 = s3;呼叫的是拷貝構造!!並非拷貝賦值,因為這是建立物件

7)student s4 = s3; s4=s1;後面那個才是呼叫拷貝賦值,拷貝賦值是對已有的物件進行賦值。

8)shared_ptr在reset時會使得原來的計數器減一

9)對於thread傳引數,參考

1、使用引用和指標是要注意;

2、對於內建簡單型別,建議傳值;

3、對於類物件,建議使用引用來接收,使用引用會只會構造兩次,而傳值會構造三次,使用ref()傳只會呼叫一次,使用臨時物件會呼叫兩次

4、在detach下要避免隱式轉換,因為此時子執行緒可能還來不及轉換主線程就結束了,應該在構造執行緒時,用引數構造乙個臨時物件傳入。

10)std::move 強制把左值轉成右值,std::forward,std::bind,std::function

第十節28.async非同步一直會等到自己結束主線程才會結束,這一點和thread不一樣。並且如果是deferred模式,子執行緒還是在主線程中執行,此時執行緒id一樣。

29.shared_future和future,前者get後還能繼續get,後者不行,只能get一次,因為使用了move,導致變空。

30.atomic原子操作,理解成不需要互斥量加鎖的技術解決多執行緒併發。原子操作就是多執行緒中不會被打斷的程式執行片段。原子操作的效率比互斥量高。互斥量加鎖一般多行**,原子操作一般針對乙個變數而不是**段。

31.原子操作要麼完成要麼沒開始,沒有中間狀態。一般用於統計傳送多少資料報。

第十一節

32.++,–,+=,-=等才能支援原子操作,有的不支援,自己測試。atomia;a=a+1;就不支援原子操作

33.如果系統資源不足,呼叫thread時可能出錯,報異常。而且thread取返回值不太容易。async由於資源緊張無法建立新執行緒時,就會在主線程中執行

34.async可以延遲建立任務,async和thread最明顯的不同是,async有時候並不一定建立執行緒。

35.async如果不帶第乙個引數,預設值是launch::deferred | launch::async

第九節講錯了,這個預設值的效果可能和launch::deferred一樣也可能和 launch::async一樣

36.非同步指建立新執行緒,同步指不建立新執行緒

37.async叫建立非同步任務,不一定建立新執行緒

第十二節

38.windows的臨界區和互斥量類似。是windows.h裡的,只能在win平台上用。但是c++11裡的多執行緒可以跨平台。

39.win中的critical_section使用需要初始化

40.同乙個執行緒中使用多次進入相同臨界區是可以的,不過也要相同次數離開臨界區。但是mutex不可以這樣。

41.win沒有自動析構,比如lock_guard這樣,但是自己可以寫個class,構造進入臨界區,析構離開臨界區。這種寫法叫做rall

42.recursive_mutex 遞迴的獨佔互斥量,可以在乙個執行緒中多次上鎖。

43.超時的互斥量timed_mutex,提供try_lock_for,try_lock_unti,如果在某段時間裡沒拿到鎖或者拿到鎖會幹什麼

44.recursive_timed_mutex

第十三節

45.虛假喚醒:把你喚醒了卻做了沒有意義的事。 先理解好第八節的notify_one,notify_all

46.atomic:初始化需要注意

47:.執行緒池:兩萬個玩家該怎麼建立伺服器執行緒。把一堆執行緒弄到一起統一管理,迴圈利用執行緒。

實現方式:在程式啟動時,一次性建立好一定數量的執行緒。幾十幾百個,極限2000個。盡量不要在程式執行過程中建立執行緒

C 11 多執行緒

新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...

c 11 多執行緒

1.多執行緒的原理 同一時間內,cpu只能處理1條執行緒,只有1條執行緒在工作 執行 多執行緒併發 同時 執行,其實是cpu快速地在多條執行緒之間排程 切換 如果cpu排程執行緒的時間足夠快,就造成了多執行緒併發執行的假象。思考 如果執行緒非常非常多,會發生什麼情況?cpu會在n多執行緒之間排程,c...

C 11 多執行緒

2011 年 c 迎來重大的改革 語言層面上承認了 多執行緒 程式的存在 加入了 thread 多執行緒支援庫,內容豐富 功能強大。首先從我個人理解角度粗鄙的理解一下多執行緒。多執行緒眾所周知 切割時間片的多程式併發執行,大多數的計算機都支援多執行緒併發的硬體支援。這可能是最簡單的多執行緒程式了。多...