建立多個執行緒及資料共享問題

2021-10-25 06:20:07 字數 1073 閱讀 9659

#include "pch.h"

#include#include#include using namespace std;

void myprint(int num)

int main()

for (auto iter = mythread.begin();iter != mythread.end(); iter++)

std:cout << "hello world!" << std::endl; //整個程序退出

return 0;

}

執行結果

多個執行緒執行順序是亂的,與作業系統排程機制有關;

主線程等待所有子執行緒執行結束,最後主線程結束,推薦這種join寫法,更容易寫出穩定程式;

把thread物件放入容器裡管理,方便對大量執行緒管理。

#include "pch.h"

#include#include#include using namespace std;

vectorg_v = ;//共享資料,唯讀

void myprint(int num)

for (auto iter = mythread.begin();iter != mythread.end(); iter++)

std::cout << "hello world!" << std::endl; //整個程序退出

唯讀資料是安全穩定的,不需要特別處理手段,直接讀取即可;

2個執行緒寫,8個執行緒讀,沒有特別處理,程式肯定會崩潰;

最簡單的處理:讀的時候不能寫,寫的時候不能讀,2個執行緒不能同時寫,8個執行緒不能同時讀。(也就是10個執行緒每次只有乙個在寫共享資料,其他執行緒讀寫操作等待,)

寫分為10小步:由於任務切換,導致各種預料之外的事發生,最嚴重的是崩潰;

建立多個執行緒 資料共享問題分析

join 多個執行緒執行順序是亂的,跟作業系統內部對執行緒的排程機制有關。主線程等待子執行緒執行完畢後才執行 void myprint int item int main for auto iter mythread.begin iter mythread.end iter cout hello w...

6 4建立多個執行緒 資料共享問題

a 多個執行緒執行順序是亂的,跟作業系統內部對執行緒的執行排程機制有關 b 主線程等待所有子執行緒執行結束,最後主線程結束,推薦使用這種join的寫法,更容易寫出穩定的程式 c 咱們把thread物件放入到容器裡管理,看起開像個thread物件陣列,這對我們一次建立大量執行緒並對大量執行緒進行管理很...

6 多個執行緒的共享資料

1 方式 1,如果每個執行緒執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料,例如,賣票系統就可以這麼做。2,如果每個執行緒執行的 不同,這時候需要用不同的runnable物件,例如,設計4個執行緒。其中兩個執行緒每次對j增加1,另外兩個執行緒對j每次減1,...