80x86 上的原子位域操作?
80x86 是否有用于原子测试和设置字的各个位的指令?
Does 80x86 have instructions for atomically testing and setting individual bits of a word?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
80x86 是否有用于原子测试和设置字的各个位的指令?
Does 80x86 have instructions for atomically testing and setting individual bits of a word?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(1)
如果您的意思是将测试和修改位作为单个原子操作,则可以使用 LOCK 前缀将位测试指令(BT、BTS、BTR 和 BTC)全部设为原子操作。
如果您的意思是原子地测试一个位,然后作为单独的操作原子地设置一个位,则可以使用标准原子读取来测试该位,并且可以使用 LOCK OR、LOCK AND、LOCK XOR 指令来修改该位。
如果您需要更复杂的操作,例如测试一位然后设置另一位,则必须在重试循环中使用标准比较和交换 CMPXCHG 指令。
If you mean testing and modifying a bit as a single atomic operation, then the bit test instructions (BT, BTS, BTR, and BTC) can all be made atomic by using the LOCK prefix.
If you mean testing a bit atomically, and then setting a bit atomically as separate operations, you can test the bit using a standard atomic read, and modifying the bit can be done using LOCK OR, LOCK AND, LOCK XOR instructions.
If you need something more complicated, e.g. testing one bit and then setting a different bit, you'll have to use the standard compare-and-swap CMPXCHG instruction in a retry loop.