调用条件函数时的条件变量?

时间:2013-10-29 11:17:59

标签: c++ multithreading

template <typename T>
class BlockingQueue{
private:
    queue<T> _queue;
    mutex _mutex;
    condition_variable _cond;
public:
    void push( const T& item){
        unique_lock<mutex> locker(_mutex);
        _queue.push(item);
        locker.unlock();
        _cond.notify_one();
    }
    T pop(){
        unique_lock<mutex> locker(_mutex);
        _cond.wait(locker, [=](){ return !_queue.empty() ;} ); //lambda function, capture by value
        T item = _queue.front();
        _queue.pop();
        return item;
    }
};

所以这是一个阻塞队列实现。我有两个问题

  1. 在push函数中,lock.unlock()在_cond notify_one()之前;这是必要的,因为当函数返回时,锁定器超出范围并释放互斥锁。是否必须在通知之前?
  2. 为什么pop()中的条件lambda函数是按值传递的?

0 个答案:

没有答案