在C++中,互斥鎖(mutex)是一種同步原語(yǔ),用于確保多個(gè)線程在訪問共享資源時(shí)不會(huì)發(fā)生沖突。C++標(biāo)準(zhǔn)庫(kù)中的<mutex>
頭文件提供了互斥鎖的實(shí)現(xiàn)。以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用互斥鎖實(shí)現(xiàn)線程同步:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 創(chuàng)建一個(gè)互斥鎖
int shared_data = 0; // 定義一個(gè)共享數(shù)據(jù)
// 線程函數(shù)
void thread_func(int num_iterations) {
for (int i = 0; i < num_iterations; ++i) {
mtx.lock(); // 加鎖
++shared_data; // 修改共享數(shù)據(jù)
mtx.unlock(); // 解鎖
}
}
int main() {
const int num_threads = 5;
const int iterations_per_thread = 1000;
std::thread threads[num_threads]; // 創(chuàng)建線程數(shù)組
// 啟動(dòng)線程
for (int i = 0; i < num_threads; ++i) {
threads[i] = std::thread(thread_func, iterations_per_thread);
}
// 等待所有線程完成
for (int i = 0; i < num_threads; ++i) {
threads[i].join();
}
std::cout << "Final value of shared_data: " << shared_data << std::endl;
return 0;
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)互斥鎖mtx
和一個(gè)共享數(shù)據(jù)shared_data
。我們創(chuàng)建了5個(gè)線程,每個(gè)線程執(zhí)行thread_func
函數(shù),該函數(shù)對(duì)shared_data
進(jìn)行遞增操作。在thread_func
中,我們使用mtx.lock()
加鎖,然后修改共享數(shù)據(jù),最后使用mtx.unlock()
解鎖。這樣可以確保在同一時(shí)間只有一個(gè)線程可以訪問和修改共享數(shù)據(jù),從而實(shí)現(xiàn)線程同步。