“原子”更新整个数组

2023-12-26

我有一个编写器线程和一个读取器线程来更新和处理数组池(存储在地图中的引用)。写入与读取的比率几乎为 5:1(写入的延迟是一个问题)。

编写器线程需要根据某些事件更新池中数组的几个元素。整个写入操作(所有元素)需要是原子的。

我想确保如果编写器线程正在更新它,则读取器线程会读取先前更新的数组(类似于 挥发性的东西,但在整个数组而不是单个字段上)。基本上,我可以读取陈旧的值,但不能阻止。

此外,由于写入如此频繁,因此在读/写时创建新对象或锁定整个数组的成本非常昂贵。

是否有可以使用更有效的数据结构或使用更便宜的锁?


这个想法怎么样:编写器线程不会改变数组。它只是将更新排队。

读取器线程每当进入需要阵列稳定快照的读取会话时,都会将排队的更新应用于阵列,然后读取该阵列。

class Update
{
    int position;
    Object value;
}

ArrayBlockingQueue<Update> updates = new ArrayBlockingQueue<>(Integer.MAX_VALUE);

void write()
{
    updates.put(new Update(...));
}

Object[] read()
{
    Update update;
    while((update=updates.poll())!=null)
        array[update.position] = update.value;

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

“原子”更新整个数组 的相关文章

  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 由于连接超时,无法通过 ImageIO.read(url) 获取图像

    下面的代码似乎总是失败 URL url new URL http userserve ak last fm serve 126 8636005 jpg Image img ImageIO read url System out printl
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • zk 与 gwt zk 请求太多

    您好 我正在尝试比较 zk 和 gwt 的性能 在我的比较中 如果框架本身将一些代码转换为js 那么我自己无法编写任何javascript 如get 但我无法自己编写js 在以上述方式编写代码时 几乎所有在浏览器上完成的操作都会将请求发送到
  • 与简单的文件请求相比,您预计 Web 服务请求的响应时间开销是多少?

    我正在开发一个 asp net Web 服务应用程序 以向使用 jQuery ajax 发出请求的小部件提供 json 格式的数据 我一直在使用 FireBug Net 视图来检查数据请求需要多长时间 在我最初的原型中 我只是请求静态 js
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • 如何在 PHP 数组中的另一个已知(通过键或指针)元素之后有效地插入元素?

    给定一个数组 a array abc 123 k1 gt v1 k2 gt v2 78 tt k3 gt v3 当其内部指针指向其元素之一时 如何在当前元素之后插入元素 如何在键已知元素 例如 k1 之后插入元素 表现护理 您可以通过使用拆
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • 场景生成器删除 fxml 文件中的导入

    我使用场景构建器 Gluon Scene Builder JavaFX Scene Builder 8 1 1 来创建应用程序的 UI 并使用 Eclipse 开发 JavaFX 现在 每次我在场景生成器中保存某些内容时 它都会从 fxml
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • 为什么我在 Mac 上看到“java.lang.reflect.InaccessibleObjectException: Unable to make private java.nio.DirectByteBuffer(long,int)accessibl

    我已经在工作中愉快地构建代码好几天了 但突然我的一个项目 不是全部 失败并出现此错误消息 看看下面的答案吧 我是如何修复它的 起初我用谷歌搜索 看到很多有这个问题的人正在使用 Java 16 但我认为 错误 我正在使用 Java 11 因为
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序

随机推荐

  • 如何强制列表对象输入“double”

    代码 a lt structure list X Days c 10 38 66 101 129 185 283 374 Names X Days Then a is like X Days 1 10 38 66 101 129 185 2
  • 使用 https 时基于主机的 nginx 代理

    我需要使用 Nginx 作为 SSL 代理 它根据子域将流量转发到不同的后端 我似乎到处都应该定义多个 server 部分 但这对于 SSL 来说不能正常工作 这样做时 我始终会在第一个虚拟主机中处理 SSL 因为在处理 https 流量之
  • 无法在 macOS Monterey 12.3 上安装 psycopg2-binary

    我一直在尝试为我的 django 项目安装 psycopg2 binary 但到目前为止没有任何效果 它不断要求pg config文件 据我所知 只有在构建 psycopg2 时才需要该文件 那么 这里发生了什么 Collecting ps
  • VS 2013 ASP.NET调试时无法修改代码

    我正在处理一个 ASP NET 2 0 项目 该项目已从 vs 2005 gt 2010 gt 2013 升级 在 vs 2005 和 2010 中 我可以在调试时修改代码 保存更改并重新加载应用了更改的页面 现在与 2013 年相比 我无
  • 在 C 中区分 typedef 的类型/标记名称有哪些优点?

    一些代码库使用不同的标识符tag和type eg typedef struct foo int bar foo 代替 typedef struct foo int bar foo 这里详细解释了这些差异 C 中 struct 和 typed
  • 在 R 中的 for 循环中创建列

    我在 R 中有一个数据框 我想在 for 循环中创建新列 在过去的两天里我尝试了很多事情但没有成功 最后 我确实找到了一个似乎可行的解决方案 但看起来并不那么直接 我想知道是否有人有更优雅的方法来做到这一点 抱歉 如果这个问题已经得到解决
  • 使用 D3.js 为每个数据成员附加多个非嵌套元素

    我想使用 d3 创建多个非嵌套元素来创建如下结构 div p from data 0 p p from data 0 p p from data 1 p p from data 1 p p from data 2 p p from data
  • TSQL - 如何判断 SQL 是否是集群的?

    有没有办法使用 TSQL CMD 脚本或 VB 脚本来告诉 1 如果 SQL Server 集群在服务器上 并且 2 是否是主动节点 Thanks 这两个都可以使用找到 SELECT FROM fn virtualservernodes 如
  • Tensorflow编译运行很长时间

    所以我正在尝试编译TensorFlow来自源头 使用 2019 年 1 月 31 日的 git 存储库中的克隆 我从他们的 shell 脚本安装了 Bazel https github com bazelbuild bazel releas
  • 根据第一列中的数字分割矩阵

    我有一个具有以下形式的矩阵 M 1 4 56 1 1 3 5 1 1 3 6 4 2 3 5 0 2 0 0 0 3 1 2 3 3 3 3 3 我想根据第一列中给出的数字分割这个矩阵 所以我想将矩阵拆分为 A 1 4 56 1 1 3 5
  • 如何取消 git bare 存储库中的最后一次提交?

    考虑到有几个 git 命令在裸存储库中没有任何意义 因为裸存储库不使用索引并且没有工作目录 git reset hard HEAD 不是取消提交此类存储库中最后更改的解决方案 通过互联网搜索 我能找到与该主题相关的所有内容this http
  • 通过 ADB 创建 AVD 配置文件

    有什么方法可以获取或查看所有设备的 Android 调试桥 Shell 中的属性 正如我所见 adb shell 仅显示和检索已连接的设备的当前会话的当前进程 我只是想知道有一个 adb shell 脚本命令可以查看该设备的所有技术产品信息
  • MSSQL Server Management Studio (SSMS) 2005 新查询模板

    如何更改 SSMS 2005 中的默认 新查询 模板 发布这个问题作为参考 我做了一些谷歌搜索 发现了一个简单的方法 http weblogs asp net cabhilash archive 2008 11 23 sql server
  • 双向绑定无法解析 setter

    我正在尝试了解数据绑定我有我的信用卡 ViewModel 类 它在我的片段中绑定 如下所示 public class CreditCardValidatorFragment extends Fragment private CreditCa
  • 如何自动获取本地时区的时区偏移量? [复制]

    这个问题在这里已经有答案了 我正在尝试自动获取本地时区偏移量 但遇到了麻烦 我试过了 print time timezone 3600 这会得到 当前错误的 偏移量 因为它不会自动调整夏令时和非夏令时 我也尝试过 now utc pytz
  • 将多个 pandas 数据框写入 Excel

    我正在尝试写多个pandasdataframes我从一个更大的数据集中提取到 Excel 工作簿的多个工作表中 问题是它只写入第一个数据帧 即index 0 因此生成的工作簿只有一个工作表 请参阅sheet1以下 我缺少什么 这是我的问题的
  • 一起滚动的水平列表视图列表 Flutter

    我想创建水平列表视图的垂直列表 我已经使用它实现了this https stackoverflow com questions 51089041 list of horizontal list in flutter 但我的问题是每个项目都单
  • 如何使用swift获取磁力计数据?

    我正在尝试使用 CoreMotion 从我的 iphone 6 获取磁场数据 我使用以下代码访问原始数据没有任何问题 if available motionMangager magnetometerUpdateInterval update
  • 如何在 pycharm 软件包安装中添加 --trusted-host ?

    我在 Windows 7 计算机上安装了 Pycharm 社区版 2016 1 4 并尝试更新我打算从事的项目使用的一些软件包 更新失败 因为本地存储库 不是受信任的主机或不安全的主机 根据pip 因此要在命令行中更新包 我需要运行 pip
  • “原子”更新整个数组

    我有一个编写器线程和一个读取器线程来更新和处理数组池 存储在地图中的引用 写入与读取的比率几乎为 5 1 写入的延迟是一个问题 编写器线程需要根据某些事件更新池中数组的几个元素 整个写入操作 所有元素 需要是原子的 我想确保如果编写器线程正