当然,或许让某些对原子操作一无所知的人更想不到的是,Scott Meyers也说过,即便是对于C++ volatile,其仍然也可以拿来实现原子操作:
也就是说,如果你想用C++写内核,那么实现原子操作,可以把本大手子的这代码
相应的改为类似
typedef class{
public: volatile std::atomic<int> resCounter;
}
的这种。
当然,C++的volatile + 库级std::atomic确实可以用来当你用C++写内核的原子操作,但本大手子并不推荐。
不推荐是因为,比起本大手子的volatile + CMPXCHG指令的实现原子操作的方案,std::atomic首先在代码效率上未必能达到内核要求,第二,std::atomic也不如直接将CMPXCHG做成汇编wrapper那样清晰明了,CMPXCHG的汇编wrapper对寄存器的汇编操作清清楚楚。