在C++中,std::mutex用于實現互斥訪問共享資源,以避免多個線程同時訪問造成的競爭條件。可以通過以下步驟來使用std::mutex:
#include <mutex>
std::mutex mtx;
{
std::lock_guard<std::mutex> lock(mtx);
// 訪問共享資源的代碼
}
下面是一個簡單的示例,演示了如何使用std::mutex來保護共享資源的訪問:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int sharedData = 0;
void incrementData() {
std::lock_guard<std::mutex> lock(mtx);
sharedData++;
}
int main() {
std::thread t1([](){
for (int i = 0; i < 1000; i++) {
incrementData();
}
});
std::thread t2([](){
for (int i = 0; i < 1000; i++) {
incrementData();
}
});
t1.join();
t2.join();
std::cout << "Final value of sharedData: " << sharedData << std::endl;
return 0;
}
在這個示例中,我們創建了一個std::mutex對象mtx來保護共享變量sharedData的訪問。兩個線程分別調用incrementData函數來增加sharedData的值,由于我們使用了std::lock_guardstd::mutex來鎖定mutex,在訪問共享資源時會確保只有一個線程能夠訪問,從而避免競爭條件。最后輸出sharedData的最終值。