如果没有特殊的硬件指令,代码如何测试和设置行为?

发布于 2024-07-04 20:28:18 字数 64 浏览 7 评论 0原文

我发现大多数实现都需要硬件指令来执行此操作。 然而我强烈怀疑这是必需的(如果是的话,我不明白为什么......)

Most of the implementations I find require a hardware instruction to do this. However I strongly doubt this is required (if it is, I can't figure out why...)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

喜你已久 2024-07-11 20:28:19

如果您要求的话,您不需要测试和设置指令来获得互斥锁定。
Dijkstra 在 1965 年描述了我所知道的第一个互斥算法。论文的标题是“并发编程控制中问题的解决方案”,在 Google 上搜索您附近的副本。 原始算法根本不需要硬件的特殊支持,但在 CPU 中提供原子指令可以极大地提高性能。

测试和设置、原子交换和加载链接 + 条件存储都是 CPU 提供的常见原语。 All 可用于实现互斥,然后可用于实现您想要的任何锁定语义。

You don't need a test and set instruction to get mutual exclusion locking, if thats what you're asking.
Dijkstra described the first mutual exclusion algorithm I am aware of, in 1965. The title of the paper was "Solution of a problem in concurrent programming control", search Google for a copy near you. The original algorithm required no special support from the hardware at all, but providing an atomic instruction in the CPU dramatically improves the performance.

Test-and-set, atomic swap, and load-linked + store-conditional are all common primitives for CPUs to provide. All can be used to implement mutual exclusion, which can then be used to implement whatever locking semantics you want.

淡淡的优雅 2024-07-11 20:28:19

如果您想要一种跨架构的方式来执行此操作,并且正在使用 gcc,那么您可以使用 gcc 的原子内置函数:

http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html

调用这些将产生当前构建架构的硬件特定机器指令。 对于那些不支持它们的,编译将失败。 (我认为...)

If you'd like a cross-arch way to do so, and are using gcc, then you can use gcc's atomic builtins:

http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html

Calling these will result in a hardware specific machine instruction for the current build architecture. On those that do not support them, the compile will fail. (I think...)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文