问题标签 [atomic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
286 浏览

c# - 访问对象成员和原子性

  • 我们从C# 规范中知道引用读/写是原子的。在访问对象成员的语句中,引用也会被原子访问吗?我认为是的,因为它也是一种隐式引用读取,编译器在为其生成代码时必须为其提供原子性。

  • 在同一个语句中,访问对象以访问其成员会导致对象引用被持有,因此当另一个线程创建新实例时它不会被垃圾收集?

  • 那么,如果我们访问链中的成员,是否也会保留最左边的对象引用,这样它就不会被其他线程垃圾收集?

考虑以下代码;

我正在从MSDN 库、C# 规范等或 Microsoft 人员那里寻找有关该主题的官方解释,以确保我没有破坏某些东西并且一切都很好。

0 投票
1 回答
735 浏览

assembly - 80x86 上的原子位域操作?

80x86 是否有原子测试和设置单词的各个位的指令?

0 投票
5 回答
23055 浏览

language-agnostic - 原子指令

原子指令是什么意思?

以下如何成为原子的?

测试和设置

从软件的角度来看,如果不想使用非阻塞同步原语,如何保证指令的原子性?是否只能在硬件或某些汇编级指令优化中使用?

0 投票
4 回答
1508 浏览

sql - 在不违反约束的情况下交换两个数据库行

我有一张桌子regionkey

数据库的整个其余部分都外键为 areaid。在此表中, (region, locale) 上有一个具有唯一约束的索引。

问题是我有两条记录:

我需要在它们之间交换 (region,locale) 字段,这样我就可以得到:

天真的方法行不通,因为它违反了区域和​​语言环境的唯一索引:

我怎样才能做到这一点?有没有一种原子方式来进行交换?建议?

0 投票
5 回答
18083 浏览

java - 原始类型的易失性或同步?

在 Java 中,如果变量的大小小于或等于 32 位,则赋值是原子的,但如果大于 32 位则不是。

在双重或长期分配的情况下,使用什么(易失性/同步)更有效?

像,

同步不适用于原始参数。在这种情况下如何使用同步?当然我不想锁定我的班级,所以this不应该使用。

0 投票
12 回答
12391 浏览

c - 在 C 中是 "i+=1;" 原子?

在 C 中,是i+=1;原子的吗?

0 投票
1 回答
433 浏览

atomic - Berkeley DB 使用的原子性如何?

我正在编写一个简单的应用程序,其中包含 24 个项目的哈希值,以便在程序执行中保持不变,因此 Berkeley DB (DBM) 应该非常适合这项任务。

这只是为了好玩。

但我想知道是否使用它(与 Ruby 一起使用),然后当用户按下 CTRL-C 时,执行就会停止。这种情况下,是不是数据都乱了?

例如,如果 DB 中的值为 63,我将其加 1(变为 64)

那么,当“最重要的”1 被写入但 0 还没有被写入时,CTRL-C 是否会发生?在这种情况下,DB 中的值将是 127 而不是 63 或 64。如果不是 Ruby 而是 C 语言,并且用户使用“关闭窗口”或“杀死”来终止进程怎么办?想一想,硬盘驱动器可能一次将这个字节(或4字节)全部写入硬盘表面,所以这种情况不应该发生。

如果 CTRL-C 不会导致这种情况发生,那么停电或我踢电源插头可能会导致这种情况发生?例如,当值第一次缓存在 RAM 中,当它被写入硬盘时,我踢了电源插头,硬盘驱动器在写入 0 之前就断电了。我知道百万分之一,这不会发生,但这只是好奇的问题。

另一方面,如果我的脚本是

  1. 减少硬币价值
  2. 在他的库存中给用户一个“汉堡包”

然后当用户按下 CTRL-C 时,它恰好发生在上面的 (1) 和 (2) 之间,那么用户将拥有更少的硬币,并且不会得到汉堡包。

为了防止这一切发生,那就是使用SleepyCat、SQLite或MySQL的事务方法,这些都不会发生?

0 投票
2 回答
831 浏览

c# - C#如何保护原子类的字段?

我正在尝试在 C# 中创建一个 AtomicReference 类,并且我想保护字段引用,但我还需要在 get 方法中返回值:

解决这个问题有点笨拙……我不能将字段设为只读,因为我需要能够设置它。有比我更好的解决方案吗?

更新:感谢您的快速回复!正确地指出,如果我简单地返回 _value,引用将受到保护。我还想保护 _value 免受变异。如果我允许 _value 在 AtomicReference 之外发生变异,那么它就违背了制作这个类的全部目的......有没有办法实现这一点?

0 投票
5 回答
1251 浏览

java - java线程安全代码+原子方法问题

我有一个将被多个线程同时访问的类管理器,我想知道我这样做是否正确?
我也认为我需要 RemoveFoo 是原子的,但我不确定

0 投票
3 回答
8414 浏览

c# - 如何在 C# 中进行原子写入/追加,或者如何使用 FILE_APPEND_DATA 标志打​​开文件?

在大多数符合 Unix 和 Posix 的操作系统下,使用 O_APPEND 执行 open() 操作系统调用向操作系统指示写入是原子追加和写入操作。通过这种行为,对于本地文件系统,当您进行写入时,您知道它会附加到文件的末尾。

Windows 操作系统通过FILE_APPEND_DATA将适当的参数传递给 Win32 CreateFile() 系统调用来支持相同的功能。

参考:

我的问题是,我无法确定如何使用 Net Framework 库在 C# 下获得这种行为,有没有办法使用 Net Framework 获得这种行为?顺便说一句,我不相信使用 FileMode.Append 会产生这种行为。