C++中多線程加鎖的方法有多種,以下是常見的幾種方法:
std::mutex
類來實現,可以使用lock()
函數來獲取鎖,unlock()
函數來釋放鎖。#include <mutex>
#include <thread>
std::mutex mtx;
void threadFunction()
{
std::lock_guard<std::mutex> lock(mtx); // 獲取鎖
// 臨界區代碼
// ...
// 釋放鎖
}
int main()
{
std::thread t1(threadFunction);
std::thread t2(threadFunction);
t1.join();
t2.join();
return 0;
}
#include <mutex>
#include <thread>
std::recursive_mutex mtx;
void threadFunction()
{
std::lock_guard<std::recursive_mutex> lock(mtx); // 獲取鎖
// 臨界區代碼
// ...
// 釋放鎖
}
int main()
{
std::thread t1(threadFunction);
std::thread t2(threadFunction);
t1.join();
t2.join();
return 0;
}
#include <condition_variable>
#include <mutex>
#include <thread>
std::mutex mtx;
std::condition_variable cv;
void threadFunction()
{
std::unique_lock<std::mutex> lock(mtx); // 獲取鎖
// 等待條件滿足
cv.wait(lock);
// 臨界區代碼
// ...
// 釋放鎖
}
int main()
{
std::thread t1(threadFunction);
std::this_thread::sleep_for(std::chrono::seconds(1));
// 喚醒等待線程
cv.notify_one();
t1.join();
return 0;
}
以上是常用的幾種多線程加鎖的方法,根據具體的需求和場景選擇合適的方法。同時,還可以使用其他的鎖機制,如讀寫鎖(std::shared_mutex
)、自旋鎖(std::atomic_flag
)等。