问题标签 [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.
c - 如何保证 64 位写入是原子的?
当在基于 Intel x86 的平台(特别是基于 Intel 的 Mac 使用 Intel 编译器运行 MacOSX 10.4)上用 C 编程时,何时可以保证 64 位写入是原子的?例如:
如果在对 y 的第一次赋值完成执行后另一个线程正在检查 y 的值,我想确保它看到值 0xfedcba87654321 或值 0x12345678abcdef,而不是它们的混合。我想在没有任何锁定的情况下执行此操作,并且如果可能的话,无需任何额外的代码。我希望,在能够支持 64 位代码(MacOSX 10.4)的操作系统上使用 64 位编译器(64 位 Intel 编译器)时,这些 64 位写入将是原子的。这总是正确的吗?
c++ - 如何在 C++ 中实现线程安全引用计数
如何使用 C++ 编程语言在 X86 CPU 上实现高效且线程安全的引用计数系统?
我总是遇到关键操作不是原子的问题,可用的 X86 互锁操作不足以实现引用计数系统。
以下文章涵盖了该主题,但需要特殊的 CPU 指令:
gcc - 在 32 位模式下编译 gcc 原子操作时出现链接错误
我有以下程序:
我在多 CPU 64 位 Intel 机器上运行的 Linux 上使用 GCC 4.2.2 编译这个程序:
当我在 64 位模式下编译程序时,它可以正常编译和链接:
当我在 32 位模式下编译它时,我收到以下错误:
虽然我永远不会真正在 32 位处理器上运行,但我确实需要一个 32 位可执行文件,以便可以链接一些 32 位库。
我的两个问题是:
为什么在 32 位模式下编译时会出现链接错误?
有没有办法让程序编译和链接,同时仍然能够与 32 位库链接?
c++ - Linux 上的互锁等效项
在 C++ Linux 应用程序中,获取 Win32 上的Interlocked函数提供的功能的最简单方法是什么?具体来说,一种以原子方式递增或添加 32 位或 64 位整数的轻量级方法?
multithreading - 哪些 CPU 架构支持比较和交换 (CAS)?
只是想知道哪些 CPU 架构支持比较和交换原子原语?
c++ - 高级比较和交换 (CAS) 函数?
我想记录哪些高级(即 C++ 不是内联汇编器)函数或宏可用于比较和交换(CAS)原子原语......
_InterlockedCompareExchange
例如,x86 上的 WIN32在标头中有一系列函数<_intrin.h>
。
multithreading - gcc 中的线程安全原子操作
在我处理的一个程序中,我有很多代码如下:
如果中间指令可以用原子存储代替,这显然是对 CPU 周期的浪费。我知道 gcc 非常有能力做到这一点,但是我还没有找到很多关于这种简单的线程安全原子操作的文档。如何用原子操作替换这组代码?
(我知道简单的存储理论上应该是原子的,但我不想希望优化器不会在过程中的某个时刻搞砸它们的原子性。)
澄清:我不需要它们是严格原子的;这些变量仅用于线程同步。也就是说,线程 B 读取该值,检查它是否正确,如果不正确,它就休眠。所以即使线程 A 更新了值而线程 B 没有意识到它的更新,这也不是问题,因为这只是意味着线程 B 在它不需要的时候休眠了,当它醒来时,值会是正确的。
.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.
.net - 如何使 IEditableObject.EndEdit 成为原子的?
如果我有一个实现 IEditableObject 的 Address 对象,我可能会有这样的 EndEdit 实现:
例如,如果更新_state时出现异常,则应重置所有 5 个属性。这个原子更新问题可能不仅限于 EndEdit。
java - 以原子方式更新多行
我需要执行一个选择,然后ResultSet
以原子方式更新其中的一些行。
我使用的代码看起来像(简化):
- 我可以保证更新将自动执行吗?如果不是,我怎么能保证呢?
- 如果任何其他进程更改了您正在更新的数据库行,会发生什么
updateRow()
?有什么办法可以锁定中的行ResultSet
吗?