C++ 互斥鎖(mutex)是一種同步原語,用于確保多個線程在訪問共享資源時不會發生數據競爭。互斥鎖通過以下兩種方式保證數據一致性:
互斥訪問:當一個線程獲得互斥鎖時,其他試圖獲得該鎖的線程將被阻塞,直到鎖被釋放。這樣可以確保同一時刻只有一個線程訪問共享資源,從而避免了數據競爭。
有序訪問:當一個線程獲得互斥鎖后,其他線程必須等待該線程釋放鎖才能繼續執行。這樣可以確保對共享資源的訪問順序是可控的,從而避免了數據不一致的問題。
下面是一個簡單的 C++ 互斥鎖示例,展示了如何使用 std::mutex
保護共享資源:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 定義一個互斥鎖
int shared_data = 0; // 定義一個共享資源
// 線程函數,用于對共享資源進行操作
void thread_func() {
for (int i = 0; i < 1000; ++i) {
mtx.lock(); // 獲取互斥鎖
++shared_data; // 對共享資源進行操作
mtx.unlock(); // 釋放互斥鎖
}
}
int main() {
std::thread t1(thread_func); // 創建一個線程
std::thread t2(thread_func); // 創建另一個線程
t1.join(); // 等待線程 t1 完成
t2.join(); // 等待線程 t2 完成
std::cout << "Shared data: " << shared_data << std::endl; // 輸出共享資源的結果
return 0;
}
在這個示例中,我們使用 std::mutex
保護了共享資源 shared_data
,確保了對它的訪問是互斥的,從而保證了數據一致性。