1. 程式人生 > 其它 >04C++11多執行緒程式設計之建立多個執行緒和資料共享問題分析

04C++11多執行緒程式設計之建立多個執行緒和資料共享問題分析

技術標籤:C++11多執行緒程式設計多執行緒

04C++11多執行緒程式設計之建立多個執行緒和資料共享問題分析

1 thread迴圈建立多個子執行緒
思想就是使用容器建立多個執行緒,推薦,以後工作中會使用到,具有實際意義,方便統一管理執行緒。

#include<iostream>
#include<thread>
#include<string>
#include<vector>

using namespace std;


void MyPrint(int i) {
	cout << "my tid = "
<< this_thread::get_id() << endl; } int main(){ //使用容器建立多個執行緒,推薦,以後工作中會使用到,具有實際意義,方便統一管理執行緒 vector<thread> vTh; for (auto i = 0; i < 10; i++) { vTh.push_back(thread(MyPrint, i)); } for (auto vit = vTh.begin(); vit != vTh.end(); vit++) { if (vit->joinable()) { vit-
>join(); } } cout << "回收子執行緒完成" << endl; return 0; }

結果如下,混亂是因為執行緒競爭CPU時間分片的原因。
在這裡插入圖片描述

2 資料共享問題分析
這個很簡單,我就不使用程式碼分析了。注:共享都是指多執行緒下。
1)只讀:不需要做任何處理,都是安全的。
2)有讀有寫:必須加鎖或者其它同步處理,使其安全的訪問。否則輕則資料讀取的值未知,重則程式崩潰。例如普通全域性變數的值未保護,多個執行緒訪問的時候就會可能出現負很大的數;或者是全域性vector容器,不作保護並且有刪除元素或者push,pop等操作,其它執行緒此時同樣訪問該迭代器都會可能出現崩潰,特別是刪除。具體可以看我STL容器的文章看。

3)只有寫:一般不會只有寫,因為都是先讀即先判斷在確定是否寫。

但是說很簡單,保護起來就非常的困難了。需要大量的工作經驗積累。