C++ 优化VS2010 c++;(多线程)

C++ 优化VS2010 c++;(多线程),c++,multithreading,visual-studio-2010,C++,Multithreading,Visual Studio 2010,假设我们在一个线程中调用loop_,直到_set(),在此等待另一个线程执行myCount.increment()。是否曾经有过这样的危险:myCount.value()被优化掉了,以至于当另一个线程调用myCount.increment()时,它永远无法读取更新后的值?在使用volatile之前进行彻底调查(您可能仍然存在争用条件;有些人认为使用volatile总是一个过于简单的解决方案)但是你绝对需要在计数成员上使用它。否则,这个简单的场景将导致对value()的调用得到优化(在vc2010

假设我们在一个线程中调用loop_,直到_set(),在此等待另一个线程执行myCount.increment()。是否曾经有过这样的危险:myCount.value()被优化掉了,以至于当另一个线程调用myCount.increment()时,它永远无法读取更新后的值?

在使用volatile之前进行彻底调查(您可能仍然存在争用条件;有些人认为使用volatile总是一个过于简单的解决方案)但是你绝对需要在
计数
成员上使用它。否则,这个简单的场景将导致对value()的调用得到优化(在vc2010中)


inline void\u sleep(int len){for(int i=0;i在使用
volatile
之前彻底调查(您可能仍然存在竞争条件;有些人认为使用volatile总是一个过于简单的解决方案),但您绝对需要在
count
成员上使用它。否则,这个简单的场景将导致调用value()获得优化(在vc2010中)


inline void\u sleep(int len){for(int i=0;i没有同步,您有一个竞争条件。需要查看
value()
的代码才能回答此问题。没有同步,您有一个竞争条件。需要查看
value()
的代码才能回答此问题。
//A count protected internally by a Mutex
class AtomicCount
{
public:
  AtomicCount();
  ~AtomicCount();
  int value() const;
  void increment();
private:
  HANDLE hMutex;
  int count;
};

AtomicCount myCount;
void loop_until_set() {
  while(!myCount.value())
    Sleep(1000);
}
inline void _sleep(int len) { for(int i=0;i<len;i++) { volatile int j=i; }; }
#define Sleep(x) _sleep(x)