C++中的臨界區通常通過互斥量(mutex)來保證線程安全。互斥量是一種同步原語,用于確保在同一時間只有一個線程可以訪問共享資源。當一個線程進入臨界區時,會鎖定互斥量,其他線程在嘗試進入臨界區時會被阻塞,直到該線程釋放了互斥量。
下面是一個使用互斥量保證線程安全的示例:
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void critical_section()
{
mtx.lock();
// 在臨界區執行操作
mtx.unlock();
}
int main()
{
std::thread t1(critical_section);
std::thread t2(critical_section);
t1.join();
t2.join();
return 0;
}
在上面的代碼中,critical_section
函數包含了臨界區,通過調用mtx.lock()
和mtx.unlock()
來鎖定和釋放互斥量。當t1
和t2
同時嘗試進入臨界區時,只有一個線程能夠成功獲取互斥量,另一個線程會被阻塞直到互斥量被釋放。
除了互斥量,C++中也提供了其他線程同步原語,如條件變量(std::condition_variable
)和讀寫鎖(std::shared_mutex
),可以根據具體需求選擇合適的同步機制來保證線程安全。