问题标签 [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 投票
4 回答
606 浏览

multithreading - 有没有办法可以使两次读取原子?

我遇到了一种情况,我需要内存中两个值的原子和。我继承的代码是这样的:

a 和 b 的单独读取是原子的,并且代码中其他地方对这两个内存位置的所有写入也是无锁原子的。然而,问题在于这两个位置的值可以并且确实在两次读取之间发生变化。

那么如何使这个操作原子化呢?我对 CAS 了如指掌,但它往往只涉及使读-修改-写操作原子化,而这并不是我想在这里做的。

有没有办法做到这一点,或者是重构代码的最佳选择,以便我只需要检查一个值?

编辑:谢谢,我没有提到我想在第一个修订版中无锁地执行此操作,但在我第二个修订版后有人接受了它。我知道当人们说这样的话时没有人相信,但我实际上不会使用锁。我必须用原子来模拟互斥锁,这比重构代码以跟踪一个值而不是两个值要多得多。

目前,我的调查方法涉及利用值是连续的这一事实,并通过 64 位读取原子地抓取它们,我确信这在我的目标平台上是原子的。如果有人有新的想法,请贡献!谢谢。

0 投票
3 回答
2416 浏览

c++ - 如何在 x86(奔腾及更高版本)上执行原子 64b 读取?

我想在 x86 平台(保证奔腾或更高版本)上执行和原子读取 64b 对齐的 64b 数据。

有没有办法做到这一点?(不,我不想为此使用关键部分或互斥锁,我希望它是无锁的)。

0 投票
1 回答
3180 浏览

c - 在 GCC 中实现通用原子加载或存储的更好方法?

我知道 GCC 的内置原子操作: http: //gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Atomic-Builtins.html

但是这个列表不包括非常简单的操作,比如加载和存储。我可以使用内联汇编在有限的架构上实现这些(实际上对于许多像 x86 这样的人来说,它们基本上只是普通的 mov),但在一般情况下,没有比这样的更好的方法了:

0 投票
3 回答
359 浏览

c# - 跨多个网络的文件的原子修改

我有一个应用程序正在修改 5 个相同的 xml 文件,每个文件都位于不同的网络共享上。我知道这是不必要的多余,但“必须如此”。

每次运行此应用程序时,都会添加/删除/修改一个元素(不多也不少)。

最初,应用程序打开每个 xml 文件,将元素添加/删除/修改到适当的节点并保存文件,如果不能,则抛出错误(无法访问网络共享,超时等...)

我如何使这个原子?

我最初的假设是:

但我可以看到,仅此而已。有没有其他方法可以做到这一点,或者我可以指出一个方向?

0 投票
2 回答
740 浏览

macros - 如何使宏“原子”

IOW 如何在执行宏时使 OOo 的撤消/重做正常工作?

这与我之前的问题有关:#853176

0 投票
2 回答
23006 浏览

c++ - 无锁结构的 C++ 原子操作

我正在使用原子(双)比较和交换指令实现无锁机制,例如 cmpxchg16b

我目前正在汇编中编写它,然后将其链接。但是,我想知道是否有办法让编译器自动为我执行此操作?例如,用“原子”包围代码块并让它弄清楚如何在底层处理器架构中将代码实现为原子指令(或者如果底层架构不支持它,则在编译时生成错误)?

PS我知道gcc有一些内置的(至少对于CAS)

http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Atomic-Builtins.html#Atomic-Builtins

0 投票
1 回答
368 浏览

thread-safety - 对未对齐数据的联锁操作

win32 互锁函数为数据的原子操作提供了一种机制。它们应该是线程安全的和多处理器安全的。

如果数据没有对齐会发生什么?联锁操作仍然是原子的?例如:增加一个未对齐的整数。

0 投票
2 回答
3128 浏览

sql - 事务处理:什么时候发生回滚?

最近发布了这个问题,关于一般情况下交易的定义。这个问题的一个常见答案是事务应该是一个原子工作单元

我的问题与这种原子性有关(我认为)我经常在 SQL 存储过程中看到对 ROLLBACK 的显式调用。

明确要求回滚是事务处理系统的普遍要求吗?

如果提交时发生错误,是否会自动回滚?

0 投票
4 回答
335 浏览

multithreading - 线程安全......我的“最佳”行动方案是什么?

我想知道使数据线程安全的“最佳”方法是什么。

具体来说,我需要保护一个跨多个线程的链表——一个线程可能会尝试从中读取数据,而另一个线程可能会从中添加/删除数据,甚至释放整个列表。我一直在阅读有关锁的文章;它们似乎是最常用的方法,但显然它们可能会出现问题(死锁)。我还阅读了有关原子操作以及线程本地存储的信息。

在您看来,我最好的做法是什么?大多数程序员使用的方法是什么,出于什么原因?

0 投票
11 回答
4846 浏览

multithreading - 一条汇编指令是否总是以原子方式执行?

今天我遇到了这个问题:

你有一个代码

如果worker从两个不同的线程调用counter,它们都完成后会有什么值?

我知道实际上它可以是任何东西。但我的内心告诉我,这counter++很可能会被翻译成单个汇编指令,如果两个线程都在同一个内核上执行,则为counter20。

但是,如果这些线程在不同的内核或处理器上运行,它们的微码中是否存在竞争条件?一条汇编指令是否总是可以被视为原子操作?