void HelloWorld()
{
static std::atomic<short> static_counter = 0;
short val = ++static_counter; // or val = static_counter++;
}
如果从两个线程调用此函数,
两个线程中的局部变量val
都可以是1
吗?或(如果使用static_counter++
,则为0)
答案 0 :(得分:2)
没有。唯一的方式val
在两个线程中可以具有相同的值,如果两个原子操作重叠。根据定义,原子操作不能重叠。
答案 1 :(得分:2)
两个线程中局部变量val都可以为1吗?
没有。 ++static_counter
相当于:
fetch_add(1)+1
,它不能为两个(或更多)线程返回相同的值,因为 fetch_add
是以原子方式执行的。