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();
}

posted @ 2022-07-07 15:32  Android开发8585  阅读(348)  评论(0编辑  收藏  举报