在C++中,条件变量是一种同步原语,用于在多线程环墫中协调线程的执行顺序。条件变量通常与互斥锁一起使用,以防止多个线程同时访问共享资源。
条件变量通过两个主要函数来实现:wait()和notify()。wait()函数会使当前线程等待,直到另一个线程调用notify()函数唤醒它。notify()函数用于唤醒等待在条件变量上的线程。
下面是一个简单的示例,演示了如何使用条件变量:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void thread_function()
{
std::unique_lock<std::mutex> lck(mtx);
while (!ready)
{
cv.wait(lck);
}
std::cout << "Thread is now running!" << std::endl;
}
int main()
{
std::thread t(thread_function);
// Do some work
{
std::lock_guard<std::mutex> lck(mtx);
ready = true;
}
cv.notify_one();
t.join();
return 0;
}
在这个例子中,我们创建了一个线程并在其中调用thread_function()函数。在主线程中,我们改变了ready变量的值,并通过调用cv.notify_one()函数来唤醒在条件变量上等待的线程。
需要注意的是,条件变量的使用通常需要与互斥锁一起使用,以确保在等待和通知过程中的线程安全。