在C 多執行緒程式設計中,同步原語的作用是保證多個執行緒存取共享資源時的正確性,它包括:互斥鎖(Mutex):保護共享資源,防止同時存取;條件變數(Condition Variable):執行緒等待特定條件滿足才繼續執行;原子操作:保證操作以不可中斷的方式執行。
C 並發程式設計中的同步原語詳解
在多執行緒程式設計中,同步原語是至關重要的,它可以保證多個執行緒存取共享資源時的正確性。 C 提供了豐富的同步原語,包括互斥鎖、條件變數和原子操作。
互斥鎖定 (Mutex)
互斥鎖是用來保護共用資源的同步機制。當一個執行緒獲得互斥鎖後,其他執行緒將被阻塞,直到互斥鎖被釋放。在C 中,可以使用std::mutex
類別來實作互斥鎖:
std::mutex mtx; // ... { // 获取互斥锁 std::lock_guard<std::mutex> lock(mtx); // 临界区 } // 互斥锁在离开作用域时自动释放
條件變數(Condition Variable)
##條件變數允許執行緒等待某個特定條件滿足才繼續執行。在C 中,可以使用std::condition_variable 類別來實作條件變數:
std::condition_variable cv; // ... { std::unique_lock<std::mutex> lock(mtx); // 等待条件满足 cv.wait(lock); // 执行条件满足后要执行的代码 }
原子運算
原子運算保證一個運算不可中斷的方式執行。在 C 中,可以使用 atomic 函式庫來進行原子操作:std::atomic<int> counter; // ... counter++; // 原子地增加 counter 的值
實戰案例
考慮一個有共用計數器和寫入執行緒的程式。寫入執行緒需要原子地增加計數器,而讀取執行緒需要保護地讀取計數器:std::atomic<int> counter; std::mutex mtx; // 写入线程 void write_thread() { while (true) { // 原子地增加计数器 counter++; } } // 读取线程 void read_thread() { while (true) { // 保护地读取计数器 std::lock_guard<std::mutex> lock(mtx); std::cout << "Counter: " << counter << std::endl; } } int main() { std::thread t1(write_thread); std::thread t2(read_thread); t1.join(); t2.join(); return 0; }
以上是C++ 並發程式設計中的同步原語詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!