【发布时间】:2013-12-11 17:48:12
【问题描述】:
让我们有一个递增全局原子整数的函数,然后我们将该值存储在非原子局部变量中
_Atomic int atom = 0 ;
void function( void )
{
int a = atom++ ;
}
将上述代码用于多线程时,a 是否始终具有唯一值。如果它会,正如一些评论者所建议的那样,那么像atomic_fetch_add 这样的函数有什么意义。
【问题讨论】:
-
是什么让您认为对
atomic_global_integer的访问实际上是原子的?如果是这样,a将不会在两个线程中收到相同的值。 -
@interjay 它是原子的。例如定义为
_Atomic int;。a在第一种情况下肯定可以收到相同的值。 -
在这种情况下,要么你的实现有问题,要么你在别处更改
atomic_global_integer。 -
我支持我对您未显示的代码或实现中的错误的评论。如果您不相信,请发布complete example。
-
@self.:显示代码,包括
atomic_global_integer的定义和初始化。另外,您是如何得出不同线程可以获得相同值的结论的?
标签: c multithreading concurrency increment