You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多线程只读预赋值的int/double、Hashtable等是否需lock类保护?

问题解答
  • 针对int、double这类值类型
    只要这些变量在所有工作线程启动前就完成了赋值,且后续没有任何线程对其做修改操作,完全不需要用lock、Interlocked这类同步保护机制。在主流的x86/x64架构下,读取这类原生大小的值类型是原子操作,不会出现读取到半完成值的情况;同时根据内存模型的先行发生原则,线程启动前的赋值操作会确保变量的最新值同步到所有线程的缓存中,不会出现线程读到旧值的问题。

  • 针对Hashtable、ArrayList这类引用类型
    同样,如果这些对象在所有工作线程启动前就完成了初始化和所有数据填充,并且后续全程没有任何线程对其进行修改(包括添加/删除元素、修改元素值、改变对象内部状态的任何操作),也不需要同步保护。
    要注意两个关键点:

    • 必须保证全程无写入操作,哪怕是单个线程偷偷修改一个元素,都可能导致其他线程读到不一致的状态;
    • Hashtable、ArrayList本身标记为非线程安全,是针对读写混合或多写场景而言的,纯只读且初始化完成后,多线程读取是安全的。

内容的提问来源于stack exchange,提问作者i486

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:42:02