首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在多核x86系统上,互斥是使用锁定指令实现的吗?

在多核x86系统上,互斥是使用锁定指令实现的吗?
EN

Stack Overflow用户
提问于 2011-07-29 10:19:38
回答 2查看 2.7K关注 0票数 12

在x86汇编中,有一个锁前缀,它可以应用于指令,使其成为原子指令。这是跨所有内核的原子性吗?通常涉及的延迟是多少?对于常规互斥锁,锁定的是哪条指令?

谢谢。PS:我被教导说,在缺乏这样的指令的系统上,互斥锁仍然可以完成,但它更费力。我想知道还有没有人这样做。

EN

Stack Overflow用户

发布于 2011-07-29 10:24:37

在x86上,lock前缀锁定所有核心并允许原子性。为了在没有LOCK的其他系统上实现这一点,可以使用CMPXCHG循环,或者使用带有重试逻辑的紧密循环,尝试将某些内容的值设置为预期值。正如你所看到的,第二种方法在大多数情况下更有害,因为它只是不断地循环,试图设置值(并一直这样做,直到它完成)。对于x86,延迟是最小的,可能范围是停止指令流水线或刷新它,然后自动执行该指令(通常是几个周期),第二种方法不能真正估计,因为它取决于需要自动修改的值的争用程度。对于互斥锁,我认为它是一个必须获取的标志值(检查互斥锁是否未被获取,并持续等待,直到互斥锁被抓取,然后尝试自动更改标志以获取它)。

AFAIK IBM处理器使用第二种方法,因为在linux内核上工作时,我发现原子增量函数使用它(可能它只适用于较老的处理器)。x86平台仍然使用

代码语言:javascript
复制
lock addl ...;

我承认,我在内核的这一部分工作已经有一年了,所以在某些方面我可能是错的。

票数 10
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6868007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档