C++ 使用条件锁实现高效对队列的增删读
#include <condition_variable>
#include <deque>
#include <iostream>
#include <mutex>
#include <thread>
std::deque<int> deque_;
std::condition_variable con_;
std::mutex mutex_;
int i = 0;
void m1() {
while (true) {
std::lock_guard<std::mutex> lock(mutex_);
deque_.push_back(i++);
std::cout << "m1 push_back";
std::cout << deque_.size() << std::endl;
con_.notify_one(); //唤醒wait
}
}
void m2() {
while (true) {
std::unique_lock<std::mutex> lock(mutex_);
con_.wait(lock); //释放锁,被唤醒后继续锁定
std::deque<int> copy_deque(std::move(deque_));
std::cout << "m2 copy_deque" << copy_deque.size() << ",deque_"
<< deque_.size() << std::endl;
lock.unlock(); //释放锁
std::this_thread::sleep_for(std::chrono::milliseconds(10000));
}
}
int main() {
std::cout << "Hello World!\n";
std::thread t1(m1);
std::thread t2(m2);
t1.join();
}