ContainsKey 线程安全

2023-11-26

在下面的代码中:

public class StringCache
{
    private readonly object lockobj = new object();

    private readonly Dictionary<int, string> cache = new Dictionary<int, string>();

    public string GetMemberInfo(int key)
    {
        if (cache.ContainsKey(key))
            return cache[key];
        lock (lockobj)
        {
            if (!cache.ContainsKey(key))
                cache[key] = GetString(key);
        }
        return cache[key];
    }

    private static string GetString(int key)
    {
        return "Not Important";
    }
}

1)ContainsKey线程安全吗? IOW,如果当另一个线程向字典添加内容时正在执行该方法会发生什么? 2)对于第一次返回cache[key],是否有可能返回乱码?

TIA,

MB


ContainsKey 固有的线程安全性并不重要,因为 ContainsKey 和 cache[key] 之间没有同步。

例如:

if (cache.ContainsKey(key))
   // Switch to another thread, which deletes the key.
   return cache[key];

MSDN 关于这一点说得很清楚:

允许访问集合 通过多个线程进行读取和 写作,你必须实现你自己的 同步。

欲了解更多信息,JaredPar 在以下位置发布了一篇精彩的博客文章:http://blogs.msdn.com/jaredpar/archive/2009/02/11/why-are-thread-safe-collections-so-hard.aspx关于线程安全集合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ContainsKey 线程安全 的相关文章

随机推荐

  • 为什么反应本机项目是在打字稿中创建的?我想要app.js

    我是 React Native 的初学者 我正在使用 React Native CLI 创建一个 React Native 项目 但项目是使用 app ts 创建的 我想在 javascript 版本中创建项目 我尝试过 React Nat
  • 多重继承不明确的基类

    考虑代码 struct Base struct Derived public Base struct A public Base struct B public A public Base struct C public A public
  • 如何限制 jQuery 事件的回调?

    好的 所以我像在谷歌中一样进行搜索 您在输入中键入文本 它会立即为您提供条目 但我不喜欢这样 我用类似的东西 TEXTINPUT keyup function 当用户输入速度非常快时 它会多次连接到数据库 是否有可能 只有当用户停止输入 1
  • 等待 Workbook.RefreshAll() (C#)

    我想循环遍历一个目录 使用 C 并刷新其中的所有 Excel 工作表 我用 Workbook RefreshAll 我该如何等待Workbook RefreshAll 声明结束 问题是 我打开FileA then Workbook Refr
  • 一个 Java 类中最多可以使用多少个 lambda?

    这是一个纯粹概念性的问题 Java 8 中的 Lambda 被转换为使用以下方式调用的方法invokedynamic 如果 JVM 对一个类可以拥有的最大方法数有限制 这是否意味着一个类中使用的 lambda 最大数量也受到 JVM 的严格
  • 使用 redux 时,应该如何在 React 组件中处理取消订阅?

    在我的组件中 我有以下内容 componentWillMount function this unsubscribe store subscribe function this setState message store getState
  • 如何将Scala Squeryl ORB与play 2.0框架集成?

    我正在尝试将 Squeryl ORB 与 play 2 0 框架一起使用 但是在调用时DB getConnection 在初始化期间我得到 BadPath 路径参数 无效路径 找不到defaultdb的数据源 路径表达式中不允许使用令牌 如
  • 从 device_vector 中删除元素

    推力 device vector 值 推力 device vector 键 初始化后 keys包含一些等于 1的元素 我想删除键中和值相同位置的元素 但不知道并行如何处理 可能有很多方法可以做到这一点 一种可能的方式 使用模板版本thrus
  • Android WebSocket 服务进行多个连接

    我创建了一个 Web 套接字服务 但它不断建立多个连接 我只希望应用程序建立一个连接 除非网络连接断开然后建立另一个连接 但现在 如果我按下手机上的主页按钮 它就会建立一个连接 然后返回应用程序 它将建立另一个连接 谢谢你们的帮助 在创建
  • GNU Parallel:将文件拆分为子文件

    Goal 使用 GNU Parallel 将大 gz 文件拆分为子文件 由于服务器有 16 个 CPU 因此创建 16 个子级 每个子项最多应包含 N 行 这里 N 104 214 420 行 子项应采用 gz 格式 输入文件 名称 fil
  • 获取字符串“600sp”整数部分的最佳方法?

    我有一个字符串 比如 600sp 我希望从中获取整数部分 600 If I do Integer valueOf 600sp 由于字符串中遇到非数字值 s 我收到异常 获取整数部分最快最干净的方法是什么 Thanks 如果您的字符串格式始终
  • 如何在带有参数的 Swift 块中正确处理 Weak Self

    In my TextViewTableViewCell 我有一个变量来跟踪块和一个配置方法 其中块被传入并分配 这是我的TextViewTableViewCell class TextViewTableViewCell swift impo
  • 启用急切执行时不支持 tf.gradients。使用 tf.GradientTape 代替

    from tensorflow keras applications import VGG16 from tensorflow keras import backend as K model VGG16 weights imagenet i
  • rake db:migrate 产生“rake 中止!找不到表”错误

    我是 Rails 新手 正在为我的雇主构建一个简单的项目跟踪应用程序 我一直在我的 Mac 上开发该应用程序并将其推送到 github 我刚刚设法将我的 github 存储库克隆到公司防火墙后面的 Windows 盒子上 希望让同事试用该应
  • 如何在运行时创建任意数组类型的实例?

    我试图在编译时反序列化未知类型的数组 在运行时我发现了该类型 但我不知道如何创建实例 就像是 Object o Activator CreateInstance type 这不起作用 因为没有无参数构造函数 Array 似乎没有任何构造函数
  • Sys.path.insert 插入模块路径,但导入不起作用

    我想在项目中导入一个模块 但由于导入错误给我带来了很多麻烦 所以我决定写一个小测试来看看问题出在哪里 我将一个文件夹添加到我的系统路径并尝试导入它 我得到一个Import Error no module found named xyz 像这
  • 比较器工作方式的效率

    我正在尝试使用比较器来帮助对对象列表进行排序 我有一个关于比较器到底如何工作以及它在以下示例中具体执行什么操作的问题 private static Comparator
  • 将 html5 canvas 图像保存在本地硬盘上

    我使用kineticjs库在html 5画布上创建了形状 现在我想将画布保存为本地系统硬盘上的图像 请告诉我如何使用 KineticJS 库来实现它 选择画布后 我猜使用类似 document getElementById 的东西 您应该能
  • 如何确定您的 WinForms 应用程序是否有可用的 Internet 连接?

    确定 WinForms 应用程序是否有可用的 Internet 连接的最佳方法是什么 当然以编程方式 如果用户未连接到互联网 我想禁用 隐藏某些功能 以下内容将确定您是否已连接到网络 但这并不一定意味着您已连接到 Internet Netw
  • ContainsKey 线程安全

    在下面的代码中 public class StringCache private readonly object lockobj new object private readonly Dictionary