用于std :: condition_variable :: wait的C ++谓词语法

时间:2017-06-11 09:08:59

标签: c++ c++11

我有 Stack类,我可以用 thred-safe 方式推送/弹出 unicode字符串

#pragma once
#include <string>
#include <mutex>
#include <condition_variable>
using namespace std;

class Stack
{
    private:
      wstring *stack;
      int dimension;
      int numElements;
      mutex m;
      condition_variable stackIsFull;

    public:
      Stack(int N) : dimension(N), numElements(0)
      {
        stack = new wstring[N];
      }

     ~Stack()
     {
       delete[] stack;
     }

     void push(wstring element)
     {
       unique_lock<mutex> ul(m);
       stackIsFull.wait(ul, [this]() { return !(numElements==dimension); });

       stack[numElements] = element;
       numElements++;
     } 

     wstring pop()
     {
       lock_guard<mutex> ul(m);
       if (numElements == 0)
         return L"The stack is empty!\n";
       else
       {
         numElements--;
         wstring data = stack[numElements];
         stackIsFull.notify_all();
         return data;
       }
     }

};

我不明白两件事:

  1. 这是初始化语法吗?

    Stack(int N) : dimension(N), numElements(0)
      {
    
  2. []代表以下几行:

    stackIsFull.wait(ul, [this]() { return !(numElements==dimension); });
    
  3. 我阅读了等待函数on the documentation的解释,但没有对谓词的引用:准确地说,没有语法可以解释谓词pred的用法。

0 个答案:

没有答案