
- C++ 基礎
- C++ 首頁
- C++ 概述
- C++ 環境設定
- C++ 基本語法
- C++ 註釋
- C++ Hello World
- C++ 省略名稱空間
- C++ 常量/字面量
- C++ 關鍵字
- C++ 識別符號
- C++ 資料型別
- C++ 數值資料型別
- C++ 字元資料型別
- C++ 布林資料型別
- C++ 變數型別
- C++ 變數作用域
- C++ 多個變數
- C++ 基本輸入/輸出
- C++ 修飾符型別
- C++ 儲存類
- C++ 運算子
- C++ 數字
- C++ 列舉
- C++ 引用
- C++ 日期和時間
- C++ 控制語句
- C++ 決策
- C++ if 語句
- C++ if else 語句
- C++ 巢狀 if 語句
- C++ switch 語句
- C++ 巢狀 switch 語句
- C++ 迴圈型別
- C++ while 迴圈
- C++ for 迴圈
- C++ do while 迴圈
- C++ foreach 迴圈
- C++ 巢狀迴圈
- C++ break 語句
- C++ continue 語句
- C++ goto 語句
- C++ 建構函式
- C++ 建構函式和解構函式
- C++ 複製建構函式
C++ 併發
併發是指系統能夠在任何給定時間管理多個任務或程序,並允許它們在不等待彼此完成的情況下進行的能力。併發系統中的任務可以在執行中重疊,這最終有助於提高效率和資源利用率,尤其是在作業系統、資料庫和 Web 伺服器等環境中。
C++ 中的併發
在 C++ 中,併發幫助開發人員建立可以執行多個操作的應用程式,並有助於提高其效率和響應能力。併發可以透過多種方式發生,例如透過多執行緒、非同步程式設計或分散式系統。
併發與並行
併發是指以重疊方式管理不同任務或處理器的能力,這意味著任務可以在不同的時間啟動、執行和完成。這意味著任務可能不會同時執行,但它們的執行可以在時間上重疊,從而有效利用可用資源。
而並行是併發的子類別,其中任務實際上是在不同的處理器或核心上併發執行以提高效能。
併發處理結構和任務管理,而並行則專注於同時執行以加快計算速度。
執行緒
執行緒表示程序內最小的執行單元,它允許多個任務獨立併發執行。<thread>庫 用於建立和管理執行緒。執行緒並行執行並共享相同的記憶體空間。
示例
以下是 C++ 中執行緒的一個簡單示例:
#include <iostream> #include <thread> void hello() { std::cout << "Hello Learner!" << std::endl; } int main() { std::thread t(hello); t.join(); // Wait for the thread to finish return 0; }
輸出
Hello Learner!
C++ 中的執行緒同步
C++ 中的執行緒同步是一種機制,它管理多個執行緒對共享資源的訪問,以防止資料競爭、不一致和未定義的行為。它確保一次只有一個執行緒可以訪問資源,或者特定操作按特定順序執行,尤其是在多個執行緒併發執行時。
C++ 中執行緒同步的關鍵方法
以下是 C++ 中執行緒同步的一些關鍵方法:
互斥量(<mutex> 庫)
互斥量(互斥)是一種鎖定機制,它限制對共享資源的訪問,以便一次只有一個執行緒可以訪問它。如果一個執行緒鎖定了互斥量,則嘗試鎖定相同互斥量的其他執行緒將被阻塞,直到互斥量被解鎖。
std::lock_guard 和 std::unique_lock
std::lock_guard 是一個基本的自動鎖管理器,它在建立時鎖定互斥量,並在超出範圍時解鎖它。
std::unique_lock 更加靈活,允許手動解鎖和重新鎖定。
條件變數(<condition_variable> 庫)
它使執行緒能夠等待直到滿足某些條件,這有助於執行緒之間的通訊。
std::condition_variable 通常與 std::unique_lock<std::mutex> 一起使用,並提供 wait()、notify_one() 和 notify_all() 函式,用於根據特定條件阻塞和恢復執行緒。
原子變數(<atomic> 庫)
原子操作是另一種在不使用互斥量的情況下確保執行緒安全的方法。
原子變數保證任何讀-修改-寫操作都在沒有其他執行緒干擾的情況下完成,這對於整數或布林值等簡單資料型別很有用。
原子操作包括 fetch_add、load、store 和 compare_exchange。
訊號量
訊號量是一種同步原語,它在併發系統(如多執行緒或多程序環境)中管理對共享資源的訪問。訊號量本質上是一個整數,它控制對資源的訪問。它基於兩個主要操作:
- 等待(P 或獲取):減少訊號量值。
- 訊號(V 或釋放):增加訊號量值。
C++ 中的非同步執行
在 C++ 中,std::future 和 std::promise 是用於非同步程式設計的機制,它們有助於管理資料或線上程之間進行結果通訊,允許一個執行緒提供結果(透過 std::promise)而另一個執行緒檢索它(透過 std::future)。這些是 C++11 標準的一部分,可以在 <future> 標頭檔案中找到。
非同步程式設計的關鍵元件
- std::future - 它表示非同步操作的未來結果。一個執行緒可以在結果可用時從 future 中檢索結果,如果結果未準備好,std::future::get() - 函式將阻塞直到計算出值。
- std::promise - 它用於設定稍後可以透過 std::future 檢索的值或異常。
- std::async - 它用於非同步啟動任務。它返回一個 std::future,該 future 可用於在任務完成後獲取任務的結果。