マルチスレッドのためのこれまでで最も単純な Mutex アプローチについてお聞きしたいと思います。次のコードはスレッドセーフ (quick-n-dirty) ですか?
class myclass
{
bool locked;
vector<double> vals;
myclass();
void add(double val);
};
void myclass::add(double val)
{
if(!locked)
{
this->locked = 1;
this->vals.push_back(val);
this->locked = 0;
}
else
{
this->add(val);
}
}
int main()
{
myclass cls;
//start parallelism
cls.add(static_cast<double>(rand()));
}
これは機能しますか?スレッドセーフですか?最も単純なミューテックスを作成する方法を理解しようとしています。
私の例について何かアドバイスがあれば、よろしくお願いします。
ありがとうございました。
うまくいかないと言ってくれてありがとう。コンパイラに依存しない修正を提案できますか?