我发现的大多数实现都需要一个硬件指令来执行此操作。然而,我强烈怀疑这是必需的(如果是这样,我不明白为什么......)一个代码如何在没有特殊硬件指令的情况下测试和设置行为?
-1
A
回答
3
你不需要测试和设置指令来获得互斥锁定,如果这就是你要求的。Dijkstra在1965年描述了我所知道的第一个互斥算法。论文的标题是“并发编程控制中的问题的解决方案”,在谷歌搜索附近的副本。原始算法完全不需要硬件的特殊支持,但在CPU中提供原子指令可显着提高性能。
测试与设置,原子交换和加载链接+存储条件都是CPU提供的所有常见原语。所有可以用来实现互斥,然后可以用它来实现你想要的任何锁定语义。
0
如果你想要一个跨拱的方式来做到这一点,并正在使用gcc,那么你可以使用gcc的原子内建的:
http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html
调用这些将导致硬件特定机器指令为当前的构建体系结构。在那些不支持它们的地方,编译将会失败。 (我认为...)
相关问题
- 1. 如何为这个特殊情况设置一个cron作业
- 2. 如何在没有硬编码的情况下在Expressjs中设置vhost?
- 3. 在没有代码库的情况下测试JavaScript
- 4. 如何在没有指令的情况下使用JQuery和Angular?
- 5. 特殊情况下一列的总和
- 6. 如何在没有gui的情况下调试matlab代码
- 7. 如何在没有运行SBT的情况下编译测试
- 8. 如何在没有硬编码NetworkCredentials的情况下使用System.Net.Mail?
- 9. 如何在没有代码的情况下调试一个asp.net程序?
- 10. 在没有启动设备模拟器的情况下测试BlackBerry代码
- 11. 如何在没有FROM子句的情况下测试dql代码?
- 12. 如何在我的情况下设置我的Angular指令?
- 13. 如何在没有引导的情况下执行Angular代码?
- 14. 如何在特殊情况下
- 15. 如何在没有指定行的情况下选择一列?
- 16. 如何在这种特殊情况下处理多个设备?
- 17. 如何设置$发出指令在我的情况下
- 18. 如何在没有NuGet的情况下安装和设置RESTSharp?
- 19. 如何在没有Visual Studio的情况下使用命令行构建代码
- 20. 哪里可以测试arduino在没有硬件的情况下做什么?
- 21. 在没有真实硬件的情况下使用libusb测试应用程序
- 22. 有没有办法检查设置并仅在设置了该设置的情况下才运行测试?
- 23. ColdFusion 10 REST API:如何在没有RestSetResponse的情况下设置状态代码()
- 24. 如何在没有pdb文件的情况下进行调试?
- 25. WPF在运行时没有代码的情况下设置键盘焦点
- 26. 测试特殊和HTML代码
- 27. 如何在没有VideoToolbox的情况下访问tvOS上的硬件解码?
- 28. C++ - 在没有物理设备的情况下测试串口
- 29. 如何在没有设计的情况下设置acts_as_votable?
- 30. 指定代码运行任何玩笑的设置情况
http://www.dis.uniroma1.it/~baldoni/p569-dijkstra.pdf – Chris 2008-09-20 06:38:41