代码如下:
...
__sync_add_and_fetch(&g_cur_mem, size);
size_t curr = g_cur_mem;
while ( true ) {
size_t peak = g_peak_mem;
if ( curr <= peak )
break;
if ( __sync_bool_compare_and_swap(&g_peak_mem, peak, curr) )
break;
}
...
g_cur_mem是用于保存总内存的全局变量,g_peak_mem是用于保存g_cur_mem峰值的全局变量。
这些代码在多线程环境中的内存分配器的alloc()函数中。
我的问题是:在多线程环境中使用__sync_bool_compare_and_swap是否正确?
或
代码是否在逻辑上处于多线程环境中以获得g_cur_mem的正确峰值?
答案 0 :(得分:1)
是的,如果不是在多线程环境中,我看不出它在哪里有意义。但是,您可以使用Atomic Buildins,因为建议Sync Builtins使用它:
这些功能是根据“ __atomic”内置函数实现的。不应将它们用于应使用__atomic内置函数的新代码。