3.1.4. pfi::concurrent::mvar¶
3.1.4.1. 概要¶
同期変数
3.1.4.2. 使い方¶
mvar<T>::mvar()
空のmvarを生成
mvar<T>::mvar(const T &v)
vが入ったmvarを生成
T mvar<T>::take()
mvarの中身を取り出す。 中身がなければ誰かが入れるまで待つ。
void mvar<T>::put(const T &v)
mvarにvを入れる。 すでに中身が入っていれば、誰かが取り出すまで待つ。
T mvar<T>::read()
mvarの中身を見る。 中身が無ければ誰かが入れるまで待つ。
bool mvar<T>::try_take(T &ret)
mvarの中身を取り出してみる。 中身が無ければfalseを返す。 あればtakeしてtrueを返す。
bool mvar<T>::try_put(const T &v)
mvarにvを入れようとしてみる。 中身が無ければputしてtrueを返す。 あれば、falseを返す。
bool mvar<T>::empty()
中身が空かどうかを返す。
3.1.4.3. サンプルコード¶
mvar<string> mv;
void foo()
{
for (;;){
string str;
if (mv.try_take(str)){
if (str=="quit")
break;
cout<<"*** "<<str<<endl;
}
thread::sleep(5);
}
}
int main()
{
thread thr(&foo);
thr.start();
for (;;){
string str;
cout<<"> "<<flush;
getline(cin,str);
mv.put(str);
if (str=="quit")
break;
}
thr.join();
return 0;
}