C++11 condition_variable 实现 pthread_cond_timedwait()
时间: 2024-04-12 07:25:08 浏览: 114
Program using Pthreads
3星 · 编辑精心推荐
C++11中引入了condition_variable类,用于实现线程间的同步和通信。condition_variable类提供了wait()和notify()等函数,可以实现类似pthread_cond_wait()和pthread_cond_signal()的功能。
要实现类似pthread_cond_timedwait()的功能,可以结合condition_variable和unique_lock来实现。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void worker_thread()
{
std::this_thread::sleep_for(std::chrono::seconds(2));
std::unique_lock<std::mutex> lock(mtx);
ready = true;
cv.notify_one();
}
int main()
{
std::cout << "Main thread starts." << std::endl;
std::thread worker(worker_thread);
std::unique_lock<std::mutex> lock(mtx);
if (cv.wait_for(lock, std::chrono::seconds(3), []{ return ready; }))
{
std::cout << "Worker thread signaled." << std::endl;
}
else
{
std::cout << "Timeout occurred." << std::endl;
}
worker.join();
std::cout << "Main thread ends." << std::endl;
return 0;
}
```
在上面的示例中,worker_thread函数是工作线程,它会在2秒后将ready标志设置为true,并通过cv.notify_one()通知等待的线程。
在主线程中,我们使用cv.wait_for()函数等待条件变量的通知,等待时间为3秒。如果在等待时间内收到通知,则输出"Worker thread signaled.";如果超过等待时间仍未收到通知,则输出"Timeout occurred."。
注意,在使用condition_variable时,需要结合unique_lock来进行互斥锁的管理,以确保线程安全。
阅读全文