我有一些代码,将会从两个线程访问:多线程代码 - 力执行顺序
class Timer{
public:
void Start(){
start_ = clock_->GetCurrentTime();
running_ = true;
}
void Read(){
if(running_){
time_duration remaining = clock_->GetCurrentTime() - start_;
Actions(remaining)
}
}
private:
void Actions(time_duration remaining);
time start_;
bool running;
};
我看着在各个库提供一些其他的计时器,但没有发现任何适合我的要求,因此我滚动自己的...
Start()方法从一个线程被调用(仅一次)。 Read()方法在另一个线程中被非常快速地调用,调用将在Start()被调用之前开始。
显然,在设置running_标志之前,初始化start_变量之前是,这非常重要。这可以通过添加一个互斥体来获得,该互斥体在进入Start()方法时被抓住并且在Read()方法中检查running_之前抓取...但似乎没有必要。如果这里的一切按顺序执行,那就没有问题了。在另一个线程处于Start()路由中的时候,Read()会发生,并且从时钟获取时间,例如... Read()发生的速度足够快以至于它不是一个大不了。
反正,我一直在寻找一种方法来确保编译器/处理器将在它们上面列出的顺序执行
start_ = clock_->GetCurrentTime();
running_ = true;
指令。 (或者如果我忽略了别的东西)。
这不起作用,因为start_不是一个小原子事物。 – teeks99 2009-01-20 21:55:21