最近开源的实时流处理系统heron中有如下代码(节选),请写出这段代码所用到的设计模式与惯用法及其各自适用的场景或原因
``` c++
class PCQueue {
public:
PCQueue() {}
virtual ~PCQueue() throw() {}
PCQueue(const PCQueue& pcqueue) = delete;
PCQueue& operator=(const PCQueue& pcqueue) = delete;
void enqueue(void* _item);
void* dequeue(void);
protected:
std::queue<void*> queue_;
std::condition_variable cond_;
std::mutex mutex_;
};
void PCQueue::enqueue(void* _item) {
std::unique_lock<std::mutex> m(mutex_);
queue_.push(_item);
cond_.notify_one();
}
void* PCQueue::dequeue() {
std::unique_lock<std::mutex> m(mutex_);
while (queue_.empty()) cond_.wait(m);
void* item = queue_.front();
queue_.pop();
return item;
}