在std::atomic
可用之前,什么是多平台(windows& linux)以原子方式递增变量的方式?
我目前正在使用boost::detail::atomic_count
,但它位于boost::detail
命名空间中,我不知道它是否可以安全使用。
答案 0 :(得分:2)
多平台,但编译器特定的方式是使用GCC的__sync_fetch_and_add
。
或者通过一些条件编译自己定义这样的函数:
#ifdef __GNUC__
#define atomic_inc(ptr) __sync_fetch_and_add ((ptr), 1)
#elif defined (_WIN32)
#define atomic_inc(ptr) InterlockedIncrement ((ptr))
#else
#error "Need some more porting work here"
#endif