我有 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;
}
}
};
我不明白两件事:
这是初始化语法吗?
Stack(int N) : dimension(N), numElements(0)
{
[]代表以下几行:
stackIsFull.wait(ul, [this]() { return !(numElements==dimension); });
我阅读了等待函数on the documentation的解释,但没有对谓词的引用:准确地说,没有语法可以解释谓词pred的用法。