遍历条件变量的解决方法可以基于多线程编程中的条件变量和互斥锁来实现。
条件变量是多线程编程中一种同步机制,它允许一个或多个线程在满足特定条件之前进行等待。当条件满足时,条件变量将唤醒等待的线程。
以下是一个示例代码,演示了如何使用条件变量来遍历一个数组,并在满足特定条件时唤醒等待的线程。
#include
#include
#include
#include
std::condition_variable cv;
std::mutex mutex;
bool condition = false;
void printVector(const std::vector& vec) {
for (const auto& num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
}
void traverseVector(const std::vector& vec) {
std::unique_lock lock(mutex);
// 等待条件满足
cv.wait(lock, []{ return condition; });
// 条件满足时,遍历数组并打印
printVector(vec);
}
void setConditionTrue() {
std::this_thread::sleep_for(std::chrono::seconds(2));
// 设置条件为真,并通知等待的线程
{
std::lock_guard lock(mutex);
condition = true;
}
cv.notify_all();
}
int main() {
std::vector nums = {1, 2, 3, 4, 5};
std::thread t1(traverseVector, std::ref(nums));
std::thread t2(setConditionTrue);
t1.join();
t2.join();
return 0;
}
在上述示例中,traverseVector
函数等待条件满足,即condition
为真。一旦条件满足,它会遍历数组并打印。setConditionTrue
函数会在2秒后将condition
设置为真,并通过条件变量cv
通知等待的线程。
这样,当条件满足时,traverseVector
函数会被唤醒并执行相应操作。
需要注意的是,在使用条件变量时,需要与互斥锁一起使用,以确保线程安全性。