在 C 並發程式設計中管理函數狀態的常見技術包括:執行緒局部儲存 (TLS) 允許每個執行緒維護自己的獨立變數副本。原子變數允許在多執行緒環境中以原子方式讀寫共享變數。互斥鎖透過防止多個執行緒同時執行關鍵部分來確保狀態一致性。
C 函數在並發程式設計中進行狀態管理
在多執行緒程式設計中,並發函數經常需要管理自身的狀態。為了確保資料的一致性和正確性,狀態管理至關重要。本文將探討在 C 並發程式設計中管理函數狀態的常見技術。
執行緒局部儲存 (TLS)
TLS 允許每個執行緒擁有自己獨立的變數副本。這對於需要維護每個線程特定狀態的函數非常有用。以下是使用 TLS 的範例:
#include <thread> // 定义线程局部变量 thread_local int thread_counter; // 并发函数 void increment_counter() { ++thread_counter; std::cout << "Current counter: " << thread_counter << std::endl; } int main() { // 创建多个线程并执行并发函数 std::vector<std::thread> threads; for (int i = 0; i < 10; ++i) { threads.emplace_back(increment_counter); } // 等待所有线程完成 for (auto& thread : threads) { thread.join(); } return 0; }
原子變數
原子變數允許在多執行緒環境中以原子方式讀寫共享變數。這可以防止狀態出現競爭條件和資料損壞。以下是如何使用 std::atomicbd43222e33876353aff11e13a7dc75f6 原子變數:
#include <atomic> // 定义原子变量 std::atomic<int> counter; // 并发函数 void increment_counter() { ++counter; std::cout << "Current counter: " << counter << std::endl; } int main() { // 创建多个线程并执行并发函数 std::vector<std::thread> threads; for (int i = 0; i < 10; ++i) { threads.emplace_back(increment_counter); } // 等待所有线程完成 for (auto& thread : threads) { thread.join(); } return 0; }
#互斥鎖定
互斥鎖定用於控制對共享資源的存取。它們透過防止多個執行緒同時執行關鍵部分來確保狀態的一致性。以下是如何使用 std::mutex 互斥鎖:
#include <mutex> // 定义互斥锁 std::mutex counter_lock; // 并发函数 void increment_counter() { // 获得锁 std::lock_guard<std::mutex> lock(counter_lock); // 读写共享状态 ++counter; std::cout << "Current counter: " << counter << std::endl; } int main() { // 创建多个线程并执行并发函数 std::vector<std::thread> threads; for (int i = 0; i < 10; ++i) { threads.emplace_back(increment_counter); } // 等待所有线程完成 for (auto& thread : threads) { thread.join(); } return 0; }
以上是C++ 函式在並發程式設計中如何進行狀態管理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!