作者:ggty11 | 来源:互联网 | 2023-05-27 09:01
所以我们正在使用一个版本的boost,这个版本现在很老了,直到升级我需要在C++中为我的代码进行原子CAS操作.(我们还没有使用C++ 0x)
我创建了以下cas函数:
inline uint32_t CAS(volatile uint32_t *mem, uint32_t with, uint32_t cmp)
{
uint32_t prev = cmp;
// This version by Mans Rullgard of Pathscale
__asm__ __volatile__ ( "lock\n\t"
"cmpxchg %2,%0"
: "+m"(*mem), "+a"(prev)
: "r"(with)
: "cc");
return prev;
}
我使用该函数的代码有点如下:
void myFunc(uint32_t &masterDeserialize )
{
std::ostringstream debugStream;
unsigned int tid = pthread_self();
debugStream <<"myFunc, threadId: " <inline uint32_t CAS(volatile uint32_t *mem, uint32_t with, uint32_t cmp)
{
return __sync_val_compare_and_swap(mem, cmp, with);
}
我在多核,多CPU机器上运行,但它是一台虚拟机,是否有可能这种行为是由VM造成的?