在C++中,critical_section是一種用于實現線程互斥訪問共享資源的機制。它通常用于多線程編程中,以確保多個線程不能同時訪問臨界區(共享資源),從而避免出現競態條件和數據不一致的問題。
使用critical_section需要包含
下面是一個簡單的示例代碼:
#include <iostream>
#include <mutex>
std::mutex mtx; // 創建一個mutex對象
void sharedResource()
{
std::lock_guard<std::mutex> guard(mtx); // 使用lock_guard自動鎖定和解鎖
// 在這里進行對共享資源的操作
std::cout << "Accessing shared resource" << std::endl;
}
int main()
{
std::thread t1(sharedResource);
std::thread t2(sharedResource);
t1.join();
t2.join();
return 0;
}
在上面的示例中,我們創建了一個mutex對象mtx
,然后在sharedResource
函數中使用std::lock_guard<std::mutex>
進行鎖定和解鎖。這樣,當兩個線程t1
和t2
同時訪問sharedResource
時,只有一個線程能夠獲取mtx
的鎖,另一個線程則會被阻塞,直到鎖被釋放。
請注意,對共享資源的訪問應該盡量放在鎖的范圍內,以確保線程安全。此外,還可以使用其他類型的鎖,如std::unique_lock
,以便更靈活地控制鎖的生命周期。