首頁  >  文章  >  後端開發  >  C++ 並發程式設計中的同步原語詳解

C++ 並發程式設計中的同步原語詳解

WBOY
WBOY原創
2024-05-31 22:01:04756瀏覽

在C 多執行緒程式設計中,同步原語的作用是保證多個執行緒存取共享資源時的正確性,它包括:互斥鎖(Mutex):保護共享資源,防止同時存取;條件變數(Condition Variable):執行緒等待特定條件滿足才繼續執行;原子操作:保證操作以不可中斷的方式執行。

C++ 并发编程中的同步原语详解

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn