问题标签 [compare-and-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.

0 投票
2 回答
2239 浏览

haskell - Haskell:“atomicModifyIORef”是如何工作的?

有人可以解释如何atomicModifyIORef工作吗?尤其:

(1)它是等待锁定,还是乐观地尝试并在存在争用时重试(如TVar)。
(2) 为什么 的签名与atomicModifyIORef的签名不同modifyIORef?特别是,这个额外的变量是什么b

编辑:我想我已经找到了(2)的答案,因为这b是一个要提取的值(如果不需要,这可以是空的)。在单线程程序中,知道该值是微不足道的,但在多线程程序中,人们可能想知道在应用函数时之前的值是什么。我认为这就是为什么modifyIORef没有这个额外的返回值(因为这种返回值的用法modifyIORef可能无论如何都应该使用atomicModifyIORef。我仍然对(1)的答案感兴趣。

0 投票
3 回答
3680 浏览

c# - 比较和交换有什么用?

我最近在阅读有关比较和交换原子操作(CMPXCHG、.NET 的 Interlocked.CompareExchange 等)的信息。

我了解它在内部是如何工作的,以及它是如何从客户那里使用的。

我不太清楚的是什么时候有人会使用 CAS?

维基百科说:

CAS 用于实现同步原语,如信号量和互斥锁,以及更复杂的无锁和无等待算法。

那么,谁能给我一个更通用的真实世界用例,其中包含 CAS 使用的代码和描述?

这个问题与语言无关,因此任何语言都可以(首选基于 C 或 x86 汇编)。

谢谢!

0 投票
1 回答
979 浏览

c++ - MinGW 未定义对“___atomic_fetch_sub_4”的引用

当尝试构建一个使用原子操作的简单测试程序时,我得到了错误 undefined reference to `___atomic_fetch_sub_4'
具体来说,它只发生在我--结合使用时==

代码编译得很好,但是在尝试链接时出现错误。我将 MinGW 与 GCC 4.7 一起使用。

0 投票
2 回答
351 浏览

c++ - 使用 sync_val_compare_and_swap 锁定空闲列表

我正在尝试提供一种线程安全的方式来更新对象。我看过一些关于它的帖子,但没有什么能 100% 回答我的问题。

我想要做的是维护一个名为“m_First”的指针来指向我的数据。如果有人调用 get,我会尊重该指针,返回对它指向的对象的引用。

如果有人调用 set,传入一个指向新对象的指针,我们将该指针添加到我们的列表并更新 m_First 以指向新对象。

我将对象存储在一个向量中,这样我们就可以在完成后清理内存。

目前我定义了这些成员:

首先是这样初始化的。m_First = m_List.back();

我想允许多个线程读取 m_First,同时多个线程也写入 m_First。

我的班级有两种方法

我想知道的是,在 get 方法线程安全中返回 *m_First 。即我可以安全地取消引用它并返回对对象的引用,而另一个线程正在尝试更新 m_First,或者我是否需要使用某种原子方法来读取 m_First。

任何建议/帮助将不胜感激。

0 投票
2 回答
408 浏览

java - 原子参考用法

假设您有以下课程

然后执行以下代码

在最后两行

这是否意味着新创建的 AccessStatistics 实例与当前的 AccessStatistics 实例具有相同的引用。怎么会这样 ?谁能解释一下。非常感谢。

0 投票
1 回答
2386 浏览

mysql - InnoDB 与 MyISAM 中的 MySQL 原子更新

无论引擎如何(例如 InnoDB 或 MyISAM),这个“比较和交换”语句是否总是原子的?:

我问这个是因为我打算使用该语句来执行与事务和非事务数据库表兼容的伪行级锁定。

这是推荐用于 MyISAM的方法,但我不确定这是否适用于 InnoDB,因为文档建议改用事务。

0 投票
2 回答
6734 浏览

struct - Go中的原子比较和交换结构

我正在尝试使用 Maged M. Michael 和 Michael L. Scott 的算法为并发应用程序创建一个非阻塞队列包,如此处所述

这需要使用"sync/atomic"包提供的原子 CompareAndSwap。
但是,我不确定与以下伪代码等效的 Go 是什么:

其中tailnext是类型:

并且node是类型:

如果我理解正确,似乎我需要用一个结构(指针和一个uint)做一个 CAS。这甚至可以通过atomic-package 实现吗?

感谢帮助!

0 投票
1 回答
32 浏览

mysql - 将 InactiveDt 更改为与产品 ID 中下一个最低 EffectiveDt 的日期相同

我有一张桌子:

我想要做的是使用更新,以便将具有最低有效 dt 的记录的 inactivedt 更改为每个产品 id 的下一个最低有效 dt 的记录的有效 dt - 1。

所以说我们有:

这将更改为:

到目前为止,我有:

但这并不能真正满足我的需要。

0 投票
2 回答
919 浏览

ios - 在启用 ARC 的 iOS 上使用 OSAtomicCompareAndSwapPtr

预自动引用计数,您可以在 Objective-c 中进行适当的指针转换,以允许您使用 bool OSAtomicCompareAndSwapPtr(void* oldValue, void* newValue, void* volatile *theValue); 在处理多线程访问时尝试原子交换指针。

在 ARC 下,这些指针转换无效。ARC for iOS 下是否有等效的原子指针交换?如果这种替代方案仍然可用,我希望避免更昂贵的锁定。

0 投票
2 回答
138 浏览

java - compareAndSet 预期时的记忆效果==更新

Java 通过其原子类公开 CAS 操作,例如

AtomicInteger.compareAndSet(expected,update)

什么时候expected == update,这些调用是无操作的还是它们仍然具有易失性读+写的内存一致性效果(就像什么时候一样expected != update)?