在C++中,std::mutex和條件變量通常一起使用來實現線程之間的同步。條件變量用于在一定條件下通知等待的線程,而std::mutex用于保護共享數據以避免競爭條件。
以下是std::mutex和條件變量如何配合使用的基本示例:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker_thread() {
std::unique_lock<std::mutex> lock(mtx);
// 等待條件變量通知
cv.wait(lock, []{ return ready; });
// do some work
std::cout << "Worker thread is doing some work" << std::endl;
}
int main() {
std::thread t(worker_thread);
// do some work
std::this_thread::sleep_for(std::chrono::seconds(2));
// 通知條件變量
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_one();
t.join();
return 0;
}
在上面的示例中,worker_thread函數在等待條件變量通知時會被阻塞,直到在主線程中通過notify_one()通知條件變量。在主線程中,先設置ready為true,然后通過通知條件變量來觸發worker_thread的執行。
使用std::mutex和條件變量可以很好地實現線程之間的同步和通信,確保線程在適當的時機執行和協作。