溫馨提示×

C++互斥鎖怎樣保證數(shù)據(jù)一致性

c++
小樊
82
2024-11-09 06:59:35
欄目: 編程語言

C++ 互斥鎖(mutex)是一種同步原語,用于確保多個線程在訪問共享資源時不會發(fā)生數(shù)據(jù)競爭?;コ怄i通過以下兩種方式保證數(shù)據(jù)一致性:

  1. 互斥訪問:當一個線程獲得互斥鎖時,其他試圖獲得該鎖的線程將被阻塞,直到鎖被釋放。這樣可以確保同一時刻只有一個線程訪問共享資源,從而避免了數(shù)據(jù)競爭。

  2. 有序訪問:當一個線程獲得互斥鎖后,其他線程必須等待該線程釋放鎖才能繼續(xù)執(zhí)行。這樣可以確保對共享資源的訪問順序是可控的,從而避免了數(shù)據(jù)不一致的問題。

下面是一個簡單的 C++ 互斥鎖示例,展示了如何使用 std::mutex 保護共享資源:

#include <iostream>
#include <thread>
#include <mutex>

std::mutex mtx; // 定義一個互斥鎖
int shared_data = 0; // 定義一個共享資源

// 線程函數(shù),用于對共享資源進行操作
void thread_func() {
    for (int i = 0; i < 1000; ++i) {
        mtx.lock(); // 獲取互斥鎖
        ++shared_data; // 對共享資源進行操作
        mtx.unlock(); // 釋放互斥鎖
    }
}

int main() {
    std::thread t1(thread_func); // 創(chuàng)建一個線程
    std::thread t2(thread_func); // 創(chuàng)建另一個線程

    t1.join(); // 等待線程 t1 完成
    t2.join(); // 等待線程 t2 完成

    std::cout << "Shared data: " << shared_data << std::endl; // 輸出共享資源的結(jié)果

    return 0;
}

在這個示例中,我們使用 std::mutex 保護了共享資源 shared_data,確保了對它的訪問是互斥的,從而保證了數(shù)據(jù)一致性。

0