如果没有特殊的硬件指令,代码如何测试和设置行为?
我发现大多数实现都需要硬件指令来执行此操作。 然而我强烈怀疑这是必需的(如果是的话,我不明白为什么......)
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您要求的话,您不需要测试和设置指令来获得互斥锁定。
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.
如果您想要一种跨架构的方式来执行此操作,并且正在使用 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...)