私はatomic_flagを使用してスピンロックを実装しようとしています。 C++ 11では、atomic_flag変数を初期化する必要がありますが、コンパイルすることはできません。私は「構文エラー:不足している 『を取得したコードをコンパイルするとatomic_flag変数がクラスのメンバーである場合、その変数を初期化するにはどうすればよいですか?
class SpinLock
{
public:
SpinLock()
:m_flag(ATOMIC_FLAG_INIT) /// syntax error : missing ')' before '{'
{
}
void lock()
{
while (m_flag.test_and_set() == true){}
}
void unlock()
{
m_flag.clear();
}
private:
SpinLock &operator=(const SpinLock &);
private:
std::atomic_flag m_flag;
};
:」『{』の前に』)私のコードは次のようになります。 ATOMIC_FLAG_INITは{0}として定義されていますが、これを記述する正しい方法は何ですか?
以下はコンパイルされますが、まだスレッドセーフですか?
SpinLock()
{
m_flag.clear();
}
あなたがコンパイラを使用していますか?あなたのコードはうまくコンパイルする必要があります。 – inf
これはMSVC 2013 RCおよびRTMではコンパイルされません。 (それはしかしプレビューでコンパイルしました)。私はhttp://connect.microsoft.com/VisualStudio/feedback/details/800243/visual-studio-2013-rc-std-atomic-flag-regressionに接続バグを提出しましたが、聞いたことがありません。私のコードでは、私のコードでは、std :: atomicを使用し、test_and_setを交換(true)と置き換えてストア(false) –
私はVisual Studio 2012を使用しています –