在C++标准库中,标准的互斥锁(std::mutex)和锁守卫(std::lock_guard)等是没有直接支持超时功能的。但是,你可以使用条件变量(std::condition_variable)结合互斥锁来实现超时等待的效果。
下面是一个简单的示例,演示了如何在C++中使用条件变量和互斥锁实现超时等待:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void waitForData() {
std::unique_lock<std::mutex> lock(mtx);
if (!cv.wait_for(lock, std::chrono::milliseconds(1000), []{ return ready; })) {
std::cout << "Timeout occurred!" << std::endl;
return;
}
std::cout << "Data is ready!" << std::endl;
}
void prepareData() {
std::this_thread::sleep_for(std::chrono::milliseconds(1500)); // 模拟耗时操作
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_one();
}
int main() {
std::thread t1(prepareData);
std::thread t2(waitForData);
t1.join();
t2.join();
return 0;
}
在上面的示例中,waitForData函数通过条件变量等待ready变量的变化,如果在指定的时间内没有等到条件满足,就会输出超时信息。prepareData函数模拟了一个耗时操作,然后通知条件变量条件已满足。在main函数中,我们创建了两个线程分别调用这两个函数。