在多執行緒程式中,C 使用互斥鎖和原子類型來確保執行緒對共享資源的正確存取。互斥鎖:std::mutex類別建立一個互斥鎖,允許一次只有一個執行緒存取共享資源,防止資料競爭。原子類型:std::atomic
C 並發程式設計:管理並行執行緒中資源分配
在多執行緒程式設計中,管理資源分配對於防止資料競爭並確保程序正確性至關重要。 C 提供了幾種同步機制來實現資源分配,包括互斥鎖和原子類型。
1. 互斥鎖
互斥鎖是一種同步機制,它允許一次只有一個執行緒存取共享資源。在C 中,可以使用std::mutex
類別來建立互斥鎖。
程式碼範例:
std::mutex mtx; void thread_function() { std::lock_guard<std::mutex> guard(mtx); // 对共享资源进行操作 }
在這個範例中,std::lock_guard
是一個RAII(資源取得即初始化)包裝器,它在函數作用域的生存期內鎖定互斥鎖。
2. 原子類型
原子類型是執行緒安全的內建類型,可以執行原子操作。它們防止多個執行緒同時修改同一個變量,從而避免資料競爭。 C 標準函式庫提供了一些原子型,如std::atomic<T>
。
程式碼範例:
std::atomic<int> counter; void thread_function() { counter++; // 执行原子增量操作 }
實戰案例
考慮一個生產者-消費者問題,其中生產者執行緒生成數據,而消費者線程消耗數據。資源是共享佇列,需要由互斥鎖保護以防止資料競爭。
程式碼範例:
std::mutex mtx; std::queue<int> queue; void producer_thread() { while (true) { std::lock_guard<std::mutex> guard(mtx); queue.push(rand()); } } void consumer_thread() { while (true) { std::lock_guard<std::mutex> guard(mtx); if (!queue.empty()) { std::cout << queue.front() << std::endl; queue.pop(); } } } int main() { std::thread t1(producer_thread); std::thread t2(consumer_thread); t1.join(); t2.join(); return 0; }
在這個範例中,互斥鎖用來保護共享佇列,以防止生產者和消費者執行緒同時存取佇列。
以上是C++並發程式設計:如何管理並行執行緒中的資源分配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!