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

c - 如何保证 64 位写入是原子的?

当在基于 Intel x86 的平台(特别是基于 Intel 的 Mac 使用 Intel 编译器运行 MacOSX 10.4)上用 C 编程时,何时可以保证 64 位写入是原子的?例如:

如果在对 y 的第一次赋值完成执行后另一个线程正在检查 y 的值,我想确保它看到值 0xfedcba87654321 或值 0x12345678abcdef,而不是它们的混合。我想在没有任何锁定的情况下执行此操作,并且如果可能的话,无需任何额外的代码。我希望,在能够支持 64 位代码(MacOSX 10.4)的操作系统上使用 64 位编译器(64 位 Intel 编译器)时,这些 64 位写入将是原子的。这总是正确的吗?

0 投票
7 回答
17150 浏览

c++ - 如何在 C++ 中实现线程安全引用计数

如何使用 C++ 编程语言在 X86 CPU 上实现高效且线程安全的引用计数系统?

我总是遇到关键操作不是原子的问题,可用的 X86 互锁操作不足以实现引用计数系统。

以下文章涵盖了该主题,但需要特殊的 CPU 指令:

http://www.ddj.com/architect/184401888

0 投票
2 回答
17189 浏览

gcc - 在 32 位模式下编译 gcc 原子操作时出现链接错误

我有以下程序:

我在多 CPU 64 位 Intel 机器上运行的 Linux 上使用 GCC 4.2.2 编译这个程序:

当我在 64 位模式下编译程序时,它可以正常编译和链接:

当我在 32 位模式下编译它时,我收到以下错误:

虽然我永远不会真正在 32 位处理器上运行,但我确实需要一个 32 位可执行文件,以便可以链接一些 32 位库。

我的两个问题是:

  1. 为什么在 32 位模式下编译时会出现链接错误?

  2. 有没有办法让程序编译和链接,同时仍然能够与 32 位库链接?

0 投票
7 回答
12988 浏览

c++ - Linux 上的互锁等效项

在 C++ Linux 应用程序中,获取 Win32 上的Interlocked函数提供的功能的最简单方法是什么?具体来说,一种以原子方式递增或添加 32 位或 64 位整数的轻量级方法?

0 投票
10 回答
15695 浏览

multithreading - 哪些 CPU 架构支持比较和交换 (CAS)?

只是想知道哪些 CPU 架构支持比较和交换原子原语?

0 投票
7 回答
8722 浏览

c++ - 高级比较和交换 (CAS) 函数?

我想记录哪些高级(即 C++ 不是内联汇编器)函数或宏可用于比较和交换(CAS)原子原语......

_InterlockedCompareExchange例如,x86 上的 WIN32在标头中有一系列函数<_intrin.h>

0 投票
5 回答
21110 浏览

multithreading - gcc 中的线程安全原子操作

在我处理的一个程序中,我有很多代码如下:

如果中间指令可以用原子存储代替,这显然是对 CPU 周期的浪费。我知道 gcc 非常有能力做到这一点,但是我还没有找到很多关于这种简单的线程安全原子操作的文档。如何用原子操作替换这组代码?

(我知道简单的存储理论上应该是原子的,但我不想希望优化器不会在过程中的某个时刻搞砸它们的原子性。)

澄清:我不需要它们是严格原子的;这些变量仅用于线程同步。也就是说,线程 B 读取该值,检查它是否正确,如果不正确,它就休眠。所以即使线程 A 更新了值而线程 B 没有意识到它的更新,这也不是问题,因为这只是意味着线程 B 在它不需要的时候休眠了,当它醒来时,值会是正确的。

0 投票
1 回答
315 浏览

.net - How do I make IEditableObject.EndEdit atomic?

If I have an Address class that implements IEditableObject, I might have EndEdit implementation like this:

If there is an exception on _city, then _line1, _line2, and possibly _city should revert. This problem isn't limited to EndEdit but probably found in other places as well.

0 投票
2 回答
1012 浏览

.net - 如何使 IEditableObject.EndEdit 成为原子的?

如果我有一个实现 IEditableObject 的 Address 对象,我可能会有这样的 EndEdit 实现:

例如,如果更新_state时出现异常,则应重置所有 5 个属性。这个原子更新问题可能不仅限于 EndEdit。

0 投票
3 回答
1205 浏览

java - 以原子方式更新多行

我需要执行一个选择,然后ResultSet以原子方式更新其中的一些行。

我使用的代码看起来像(简化):

  • 我可以保证更新将自动执行吗?如果不是,我怎么能保证呢?
  • 如果任何其他进程更改了您正在更新的数据库行,会发生什么updateRow()?有什么办法可以锁定中的行ResultSet吗?