c 多執行緒thread操作(三)資料競爭互斥訪問

2021-10-07 13:32:43 字數 1605 閱讀 4760

c++多執行緒thread操作(一)環境部署

c++多執行緒thread操作(二)執行緒管理

c++多執行緒thread操作(三)資料競爭互斥訪問

c++多執行緒thread操作(四)死鎖的問題和解決

c++多執行緒thread操作(五)unique_lock加鎖

c++多執行緒thread操作(六)條件變數的使用

c++多執行緒thread操作(七)父程序獲取子程序變數的結果

c++多執行緒thread操作(八)父執行緒傳遞資料給子執行緒

c++多執行緒thread操作(九)可呼叫方式

(終)c++多執行緒thread操作(十)多執行緒並行實現資料相加的和

1. 資料競爭問題:對共享資源的訪問會出現雜亂無序的結果

void shared_print(string msg, int id) 

void func_1()

}int main()

t1.join();

return 0;

}

2. 解決競爭問題:加上mutex鎖

但如果mu.lock和mu.unlock之間丟擲了異常,mu將永遠被鎖住!所有使用lock_guard鎖來代替,只要lock_guard執行了析構函式,就會自動釋放鎖!3. lock_guard代替mutex(建議不用mutex,用lock_guard)

mutex mu;

void shared_print(string msg, int id)

但仍然有問題:cout是可競爭資源,多個執行緒可以共享使用,仍然達不到執行緒安全,考慮使用包裝類加上ofstream流進行輸出。

4. 類的實現,可作為模板使用:

#include #include #include #include #include using namespace std;

class loffile

void shared_print(string msg, int id)

//ofstream&getstream() // 這個是不安全的,f會暴露在函式外

//void processf(void fun(ofstream&))

private:

mutex m_mutex;

ofstream f;// 執行緒安全的f

};void func_1(loffile&log)

}int main()

t1.join();

return 0;

}

但要注意,ofstream不能暴露在類的外面,否則不能實現完全執行緒安全。如上述**的注釋!

c 多執行緒thread操作(二)執行緒管理

c 多執行緒thread操作 一 環境部署 c 多執行緒thread操作 二 執行緒管理 c 多執行緒thread操作 三 資料競爭互斥訪問 c 多執行緒thread操作 四 死鎖的問題和解決 c 多執行緒thread操作 五 unique lock加鎖 c 多執行緒thread操作 六 條件變數的...

C 多執行緒庫thread

參考 目前來公司工作兩年了,發現很多時候因為自己的能力廣度不足最後直接影響到產品質量。就比如自己來的第一年編寫資源池管理模組 因為自己相關知識不夠充分,編寫流水線式的 讓整個資源池建立過程十分緩慢。這絕對不是乙個優秀的開發人員能夠接受的。目前c c的 多執行緒程式設計和網路程式設計還處於空白狀態,從...

多執行緒 Thread

如果從另外乙個執行緒操作windows窗體上的控制項,就會與主線程產生競爭,造成不可預料的後果,甚至死鎖。因此,windows gui程式設計有乙個規則 只能通過建立控制項的執行緒來操作控制項的資料!實現方法 要從執行緒外操作windows控制項,那麼就要使用invoke或begininvoke方法...