gpt4 book ai didi

c++ - 具有局部静态变量的 ID 生成器 - 线程安全?

转载 作者:可可西里 更新时间:2023-11-01 18:41:17 24 4
gpt4 key购买 nike

下面这段代码在多线程场景下是否能正常运行?

int getUniqueID()  
{
static int ID=0;
return ++ID;
}

ID 不必是连续的 - 即使它跳过一个值,也没关系。是不是说这个函数返回的时候,返回的值在所有线程中都是唯一的?

最佳答案

不,不会。您的处理器将需要执行以下步骤来执行此代码:

  • 从内存中获取 ID 的值到寄存器中
  • 增加寄存器中的值
  • 将增加的值存入内存

如果在此(非原子)序列期间发生线程切换,则会发生以下情况:

  • 线程a取值1到寄存器
  • 线程 a 递增该值,因此寄存器现在包含 2
  • 上下文切换
  • 线程 b 获取值 1(仍在内存中)
  • 上下文切换
  • 线程 a 存储 2 到内存并返回
  • 上下文切换
  • 线程 b 将它存储在其寄存器中的值递增到 2
  • 线程 b(也)将值 2 存储到内存并返回 2

因此,两个线程都返回 2。

关于c++ - 具有局部静态变量的 ID 生成器 - 线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2705679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com