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

2021-09-27 13:40:57 字數 951 閱讀 7594

a)多個執行緒執行順序是亂的,跟作業系統內部對執行緒的執行排程機制有關;

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

c)咱們把thread物件放入到容器裡管理,看起開像個thread物件陣列,這對我們一次建立大量執行緒並對大量執行緒進行管理很方便。

#include#include#include#includeusing namespace std;

void myprint(int inum)

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

cout << "主線程執行!" << endl;

return 0;

}

是安全穩定的,不需要特別的處理手段;直接讀就可以。

例如:2個執行緒寫,8個線程度,如果**沒有特別的處理,程式肯定崩潰!最簡單的不崩潰處理,讀的時候不能寫,寫的時候不能讀;兩個執行緒不能同時寫,八個執行緒不能同時讀。

讀寫都是分幾個小步完成的,由於切換,導致各種詭異的事情發生,如崩潰!

網路遊戲伺服器。兩個自己建立的執行緒,乙個執行緒收集玩家命令(乙個數字代表玩家發來的命令),並把命令寫到乙個佇列中;另外乙個執行緒從佇列中取出玩家送來的命令,解析,然後執行玩家需要的動作;

list:頻繁的按順序插入和刪除資料時效率高。vector容器隨機的插入刪除資料效率高!

#include#include#include#include#includeusing namespace std;

//準備用成員函式作為執行緒函式的方法寫執行緒

class a;

int main()

執行此程式,會報錯!

解決問題:引入乙個c++解決多執行緒保護共享資料問題的第乙個概念「互斥量」,下節介紹!

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

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

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

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 h...

6 多個執行緒的共享資料

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