Solaris on Sparc 上的atomic_cas_64() 的内部实现?
在 Sparc 上的 64 位 Solaris 上,atomic_cas_64() 函数调用是使用加载链接/条件存储实现的吗?
如果没有,Solaris 是否为用户模式 C 代码提供任何 API 来利用 ll/sc 呢?
On 64-bit Solaris on Sparc, is the atomic_cas_64() function call implemented using load-link/condition-store?
If not, what if any API does Solaris offer for user-mode C code to utilize ll/sc?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Sparc64——现代CPU中唯一的——既不实现双宽CAS也不实现LL/SC。 因此,实现无锁代码是有问题的。 有一个解决方案,但它们是针对其他平台上不存在的问题(ABA)的解决方案,因为它们支持 CAS 或 LL/SC。 此外,由于这一限制,一系列无锁算法无法在 Space 上实现。
Sparc64 - alone amongst modern CPUs - implements neither double wide CAS nor LL/SC. As such, implementing lock-free code is problematic. There a solutions, but they are solutions to a problem (ABA) which does not exist on other platforms because of their support for CAS or LL/SC. Furthermore, a range of lock-free algorithms cannot be implemented on Sparce because of this limitation.
您可以查看 SPARC 和 SPARCv9 实现来准确了解它们的作用...您应该查看 membar_* 函数(在同一文件中)以了解您可以做什么要有更有力的保障。
You could have a look at the SPARC and SPARCv9 implementations to see exactly what they do... you should have a look at the membar_* functions (in the same files) to see what you can do to have stronger guarantees.