概述:在C++中,通過互斥鎖解決併發數據同步問題。定義共用數據和互斥鎖,編寫線程函數,使用互斥鎖確保操作的原子性。主函數中創建並啟動線程,保障線程安全。實例源代碼演示了簡單而有效的同步機制。 在C++中解決併發操作時的數據同步問題通常需要使用互斥鎖(Mutex)來確保線程安全。以下是詳細的步驟以及附 ...
概述:在C++中,通過互斥鎖解決併發數據同步問題。定義共用數據和互斥鎖,編寫線程函數,使用互斥鎖確保操作的原子性。主函數中創建並啟動線程,保障線程安全。實例源代碼演示了簡單而有效的同步機制。
在C++中解決併發操作時的數據同步問題通常需要使用互斥鎖(Mutex)來確保線程安全。以下是詳細的步驟以及附帶的源代碼示例:
步驟1:包含必要的頭文件
#include <iostream>
#include <thread>
#include <mutex>
步驟2:定義共用數據和互斥鎖
// 共用的數據
int sharedData = 0;
// 互斥鎖,用於保護共用數據
std::mutex mutex;
步驟3:編寫線程函數
void threadFunction(int threadId) {
for (int i = 0; i < 5; ++i) {
// 使用互斥鎖保護共用數據
std::lock_guard<std::mutex> lock(mutex);
// 對共用數據進行操作
sharedData++;
// 輸出當前線程對共用數據的操作
std::cout << "Thread " << threadId << ": Shared Data = " << sharedData << std::endl;
}
}
步驟4:主函數中創建並啟動線程
int main() {
// 創建兩個線程,並啟動它們
std::thread thread1(threadFunction, 1);
std::thread thread2(threadFunction, 2);
// 等待兩個線程執行完畢
thread1.join();
thread2.join();
return 0;
}
步驟5:編譯和運行
使用C++編譯器編譯上述代碼,並運行生成的可執行文件。觀察輸出結果,確認互斥鎖成功保護了共用數據,避免了競態條件和數據不一致性的問題。
以上步驟演示了一個基本的線程同步機制。在實際應用中,可能需要根據程式的需求選擇更複雜的同步工具,如條件變數、信號量等。同時,註意控制互斥鎖的粒度,以免過多地使用鎖導致性能問題。