同步数据从主存储器读取/写入

2024-01-12

当synchronized方法执行完成时,是只将其修改的数据推送到主存,还是所有的成员变量,同样,当synchronized方法执行时,是只从主存中读取自己需要的数据,还是清除所有的成员变量?缓存中的成员变量并从主存中读取它们的值?例如

public class SharedData
{

    int a; int b; int c; int d;

    public SharedData()
    {
        a = b = c = d = 10;
    }

    public synchronized void compute()
    {
        a = b * 20;
        b = a + 10;
    }

    public synchronized int getResult()
    {
        return b*c;
    }

}

在上面的代码中,假设compute由threadA执行,getResult由threadB执行。计算执行完毕后,threadA 会用 a 和 b 更新主存,还是会更新 a、b、c 和 d。在执行 getResult 之前,threadB 是否仅从主内存获取 b 和 c 的值,还是会清除缓存并获取所有成员变量 a、b、c 和 d 的值?


synchronized确保您对数据有一致的看法。这意味着您将读取最新值,其他缓存也将获取最新值。缓存足够智能,可以通过特殊总线相互通信(JLS 不需要,但允许)。该总线意味着它不必接触主内存即可获得一致的视图。

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

同步数据从主存储器读取/写入 的相关文章

随机推荐

  • 写时复制 (COW) 惯用法的线程安全实现?

    谁能指出我的线程安全实现写时复制 COW http en wikipedia org wiki Copy on write成语 示例代码在这个网站 http en wikibooks org wiki More C 2B 2B Idioms
  • 是否可以在 Kotlin 源代码上使用 Allatori?

    我过去曾尝试使用 Allatori 尽管禁用了很多选项 但我无法将其应用于实际的 Kotlin 字节码 我必须排除 Kotlin 文件才能使混淆起作用 是否可以对 Kotlin 字节码使用 Allatori 混淆 如果是这样 哪些选项需要禁
  • python 中的位域专业化

    这是一段 C 代码 void sign extending int x int r resulting sign extended number goes here struct signed int x 5 s r s x x cout
  • Android:底部导航视图 - 更改所选项目的图标

    我已经添加了BottomNavigationView在我的应用程序中就像 main xml
  • 随着时间的推移移动游戏对象

    我正在从 Swift SpriteKit 背景学习 Unity 其中移动精灵的 x 位置与运行操作一样简单 如下所示 let moveLeft SKAction moveToX self frame width 5 duration 1 0
  • C# Lambda => 会产生垃圾吗?

    与普通的 foreach 循环相反 使用 lambda 表达式是否会为 GC 生成垃圾 Lambda version Foos ForEach f gt f Update gameTime Normal approach foreach F
  • Newtonsoft Json 反序列化:如果/当给定的 json 字符串具有多于必要的属性时,如何抛出错误?

    假设我们有以下类 public class Foo public long Id get set 如果给定的 json 字符串是 Id 10 SomethingIrrelevant Foobar 换句话说 我们希望反序列化非常严格 并在检测
  • ggpubr::ggarrange 将绘图保存在多个页面上,每页一个图例

    我正在尝试保存多个绘图pdf每页有一个总体图例的绘图 我想知道有没有一种巧妙的使用方法ggsave and ggpubr ggarrange去做这个 改变nrow ncol within ggarrange仅更改一页的设置并强制所有绘图位于
  • 为什么我的类路径只能在末尾带有冒号?

    如果我在类路径末尾放置一个 我的应用程序只会开始记录到 log4j 我已经在类路径中拥有属性文件和 jar 所以我不确定发生了什么 用冒号结束类路径有什么作用 启动命令因此变成这样 java cp path to log4j propert
  • 导入 scipy 错误:无法导入名称 '_ccallback_c'

    I use Anaconda3 windows导入scipy v1 0 0 但我编译时出错 我在网上查了其他类似的案例 但没有找到解决方案 有人有任何想法吗 import numpy as np import scipy 错误信息 Impo
  • 使用 Python 将 .h5 文件转换为 .jpg

    我目前有一个包含灰度图像的 h5 文件 我需要将其转换为 jpg 有人有这方面的经验吗 注意 我可以将 h5 文件转换为 numpy 数组 然后使用 pypng 等外部库将其转换为 png 但我想知道是否有更有效的方法来转换为图像 最好是
  • 从Python中的另一个函数中断函数执行

    我有一个函数a执行一些任务和其他功能b是对某些事件的回调 每当事件发生时 函数b被调用 我想让它能够中断函数的执行a 这两个函数都在同一个类中声明 功能a不应该调用函数b 功能b是完全独立的 它是对来自 ROS 机器人操作系统的 检测到用户
  • 是否可以直接选择 EXISTS 作为位?

    我想知道是否可以做这样的事情 这不起作用 select cast exists select from theTable where theColumn like theValue as bit 看起来应该是可行的 但是很多应该在 SQL
  • MSDeploy/WebDeploy - 通过 DacPac 部署复合数据库项目

    我们有一个数据库项目 其中的视图连接到另一个数据库中的表 另一个数据库采用不同的解决方案 在我们从其他数据库添加对 DacPac 的引用之前 此构建失败 我相信这些视图被视为 复合数据库对象 因为它们引用的对象未作为脚本包含在数据库中 而是
  • 用 C/C++ 计算 32 位 CRC 查找表

    我想计算一个 32 位 CRC 查找表 我尝试的一种方法是使用以下代码这个网站 http www barrgroup com Embedded Systems How To CRC Calculation C Code include
  • Map/Set 维护唯一的数组数组,Javascript

    我正在尝试构建唯一的数组数组 这样每当我要添加新数组时 只有在集合中尚不存在该数组时才应添加它 例如 存储 1 1 2 的所有唯一排列 实际的 1 1 2 1 2 1 1 1 2 1 2 1 2 1 1 2 1 1 预期的 1 1 2 1
  • FullCalendar.js - “获取事件时出错”

    我正在使用 FullCalendar js 显示来自多个来源的 Google 日历事件 到今天为止一直工作正常 由于某种原因 FullCalendar 开始弹出 获取事件时出错 错误消息 并且所有事件显然都消失了 这是一个jsfiddle
  • 保存到 UserDefaults 时应用程序总是崩溃

    我不知道出了什么问题 extension UserDefaults static let shared UserDefaults suiteName SharedGroupName static func set object Any fo
  • 正则表达式查找具有不同顺序的相同数字的数字

    我已经在 Google 上寻找正则表达式一个小时左右了 但似乎无法解决这个问题 如果我有电话号码 请说 2345 我想找到具有相同数字但顺序不同的任何其他数字 如下所示 2345 比如我匹配 3245 or 5432 数字相同但顺序不同 我
  • 同步数据从主存储器读取/写入

    当synchronized方法执行完成时 是只将其修改的数据推送到主存 还是所有的成员变量 同样 当synchronized方法执行时 是只从主存中读取自己需要的数据 还是清除所有的成员变量 缓存中的成员变量并从主存中读取它们的值 例如 p