ARM 提供 LDREX/STREX 以原子地加载/存储值,但我觉得我在这仍然是一个原子操作方面遗漏了一些东西。 以下通常是如何增加一。 但是,是什么阻止了某些东西在 ADD 指令期间抢占,从而使 r2 不再匹配存储在 [r0] 中的内容? ...
ARM 提供 LDREX/STREX 以原子地加载/存储值,但我觉得我在这仍然是一个原子操作方面遗漏了一些东西。 以下通常是如何增加一。 但是,是什么阻止了某些东西在 ADD 指令期间抢占,从而使 r2 不再匹配存储在 [r0] 中的内容? ...
我使用 ARMv8 64 位的程序集为共享的 memory 上下文实现了 LIFO。 LIFO 在开头插入一个节点,每个节点结构的第一个属性必须是下一个指针。 这是为 LIFO 实现原子插入和删除的正确程序集吗? 它使用LL/SC在 LDXR 和 STXR 之间进行额外的加载或存储来读取 head ...
我在网上找到了几个地方,其中指出每当进入中断例程时“必须”调用 CLREX,我不明白。 CLREX状态的文档(添加编号以便于参考): (1) 清除执行处理器的本地记录,该记录表明地址已请求独占访问。 (2) 使用CLREX指令将紧密耦合的独占访问监视器返回到其开放访问状态。 这消除了 ...
LL/SC 与 CAS(比较和交换)在计算机体系结构上相比有什么优势? 我认为 LL/SC 可以在多核系统中解决活锁问题,也可以解决 ABA 问题,但 CAS 不行。 与 CAS 相比,我找不到 LL/SC 的任何优势。 谁能告诉我? ...
在使用比较和交换 (CAS) 技术编写无锁代码时,存在一个称为 ABA 问题的问题: http://en.wikipedia.org/wiki/ABA_problem 仅在值“A”上进行比较是有问题的,因为在两次观察之间仍然可能发生写入。 我继续阅读并找到了这个解决方案: http://e ...
我正在开发我的无锁数据结构库的下一个版本,在 ARM 上使用 LL/SC。 对于我的 LL/SC 用例,我需要将它与 LDREX 和 STREX 之间的单个 STR 一起使用。 (而不是用它来模拟 CAS。) 现在,我已经编写了代码并且这有效。 然而,我担心的是它可能并不总是有效。 我在 Po ...
在 x86 处理器下,我不确定比较和交换原子操作与加载链接/存储条件操作之间的区别。 后者比前者更安全吗? 是不是第一个比第二个好? ...