问题标签 [atomic-swap]
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++ - c++0x 原子和线程的 GCC 标志
我试图编译这个 C++ 原子和线程的基本示例,尽管当我编译 main.cpp 文件时 gcc 抛出了一些 std lib 错误——这似乎与我的代码无关。
主文件
我正在使用的完整代码:https ://github.com/preshing/AcquireRelease
这是 gcc 错误消息:
这是我使用的命令:g++ -std=c++0x -pthread main.cpp
c++ - 检查前提条件是否存在原子增量,即原子值小于指定值?
在新的标准 C++ 原子递增操作中,在递增值之前检查先决条件,即原子值小于指定值?
我可以比下面的代码更容易更快地完成它吗?
如果有人不知道 compare_exchange_weak 的工作原理: compare_exchange_weak 读取 val,与 old_val 进行比较,如果它们不相等,则将 val 保存到 old_val。如果相等,则将 new_val 保存到 val。
c++ - 两个 unique_ptr 的无锁交换
交换两个unique_ptr
s 不能保证是线程安全的。
由于我需要原子指针交换并且因为我喜欢所有权处理unique_ptr
,有没有一种简单的方法可以将它们结合起来?
编辑:如果这是不可能的,我愿意接受替代方案。我至少想做这样的事情:
在 C++11 中这样做的惯用方式是什么?
gcc - 如何原子地执行顺序加载和存储操作?
考虑 GCC 4.8.0 下的这段代码:
我怎样才能使上面的行整体是原子的?换句话说,如何获得原子变量的原子赋值?
是否有任何替代方案std::atomic
允许这样做?
我发现__transaction_atomic {/* any code goes here */}
哪个在 GCC 上由-fgnu-tm
. 有了这个,人们可以在块中写任何东西,并且它将被原子地执行。
现在的问题是:
是__transaction_atomic
用互斥锁实现的吗?如果是,那么互斥锁实际上锁定了什么?
更改的实施是否__transaction_atomic
取决于其块中的内容?如果是,那么它是如何变化的?
winapi - 原子交换两个无符号 32 位变量(ULONG)的正确方法是什么?
我找到了InterlockedExchange函数,它允许我交换两个带符号的 32 位变量 (LONG)。
但是,原子交换两个无符号的正确方法是什么32 位变量 (ULONG)
我没有看到使用 Microsoft 提供的功能的明显方法。
(考虑到微软还告诉我,将无符号整数转换为有符号整数的结果在某些情况下是由实现定义的。)
linux - Win32 InterlockedIncrement 和 InterlockedExchange 是跨进程的原子吗?
MSDN 说,互锁函数提供了一种简单的机制,用于同步访问由多个线程共享的变量。
如果变量在进程的共享内存中,我不确定它们是否跨多个进程的线程工作。
同样,GNU GCC 编译器内在函数:__sync_add_and_fetch 和 __sync_lock_test_and_set 呢?
multithreading - 原子指令:当比较和交换指令正在进行时,其他线程如何更新值?
根据我的理解,任何原子指令(compare_and_swap、test_and_test、fetch_and_add)都作为一条指令执行。尽管它们涉及多个 CPU 周期/操作,但它对线程/进程是不可见的。如果一个线程正在执行任何此类原子指令,则不允许其他线程修改/访问此类原子指令中涉及的任何值(内存位置/寄存器)。
如果是这种情况,为什么在维基百科http://en.wikipedia.org/wiki/Compare-and-swap中指出,如果同时该值已被另一个线程更新,则写入将失败。?
当一个线程中的 compare_and_swap 指令正在进行时,其他线程如何更新值?
clojure - Atom 更新挂在 Clojure 监视调用中
我有一种情况,我观察一个特定目录以进行文件系统更改。如果该目录中的某个文件被更改,我会重新读取它,附加一些现有的缓存信息,并将其存储在atom
.
相关代码看起来像
这最终在本地工作正常,但是当我将它部署到我的服务器时,swap!
呼叫挂了大约一半。
我试过通过 调试它println
,它告诉我
- 正在触发文件系统触发器。
swap!
没有多次运行该功能- 正在打开并解析被监视的文件
- 文件中的一些条目正在处理中,但该处理在条目处停止
111
(这似乎与之前的任何条目没有显着不同)。 - 更新未完成,
atom
因此保留旧值 - 挂起后不会触发任何文件系统事件。
我怀疑这可能是某个地方的内存问题,或者可能是Clojure-Watch(或底层 FS-watching 库)中的错误。
有什么想法可以解决它或进一步诊断它吗?
java - unsafe.compareAndSwapInt 第一个参数menanig
我正在研究java.util.concurrent.locks.AbstractQueuedSynchronizer
源代码。
从多个地方调用compareAndSetState
方法。
参数 expect
和update
是显而易见的,并且对应于原子参数。但是this
是对象(而不是int
)。
这与期望相比如何?
pointers - 在 CUDA 上原子交换内存指针
我在内存中有两个指针,我想以原子方式交换它,但 CUDA 中的原子操作仅支持 int 类型。有没有办法做下面的交换?