基于RAII机制(resource acquisition is initialization)
1.std::unique_lock
更灵活,可锁多个mutex,消耗大
void push(T &&t) { std::shared_ptr<T> new_data(std::make_shared<T>(std::forward<T>(t))); std::unique_ptr<node> new_tail(new node); node *p = new_tail->get(); { std::unique_lock<std::mutex> ulkt(tail_mut); p->data = new_data; p->next = nullptr; tail->next = std::move(new_tail); tail = p; } data_cond.notify_one(); }
参考文章: 简单的C++高并发安全队列:
2.std::lock_guard
消耗少,只锁一个mutex