在多线程环境中使用__sync_bool_compare_and_swap是正确的吗?

时间:2014-06-20 11:50:39

标签: c multithreading

代码如下:

...
__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的正确峰值?

1 个答案:

答案 0 :(得分:1)

是的,如果不是在多线程环境中,我看不出它在哪里有意义。但是,您可以使用Atomic Buildins,因为建议Sync Builtins使用它:

  

这些功能是根据“ __atomic”内置函数实现的。不应将它们用于应使用__atomic内置函数的新代码。