gpt4 book ai didi

c++ - 锁,内存屏障,信号量之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:51 32 4
gpt4 key购买 nike

本文:http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf (第 12 页)似乎在锁和内存屏障之间有所区别

我想知道锁、内存屏障和信号量之间有什么区别?

(虽然其他问题可能会提到锁和同步对象之间的区别,但我没有发现锁和内存屏障之间的区别)

最佳答案

内存屏障(也称为栅栏)是一种硬件操作,它确保对全局的不同读写顺序可见的商店。在典型的现代处理器上,内存访问是流水线,并且可能出现乱序。内存屏障确保这不会发生。完整的内存屏障将确保所有加载和它之前的存储发生在后面的任何加载或存储之前它。 (许多处理器都支持部分屏障;例如,在 Sparc 上,一个membar #StoreStore 确保在它之前发生的所有存储在之后发生的任何存储之前对所有其他进程可见它。)

这就是内存屏障的全部作用。它不会阻塞线程,或者任何东西。

互斥量和信号量是更高级别的原语,在操作系统。请求互斥锁的线程将阻塞,并且由操作系统暂停执行,直到该互斥体空闲为止。这操作系统中的内核代码将按顺序包含内存屏障指令实现互斥量,但它做的更多;内存障碍指令将暂停硬件执行(所有线程),直到必要的条件已经满足——一微秒左右大多数,整个处理器这次都停止了。当你尝试锁定一个互斥量,而另一个线程已经拥有它,操作系统将挂起你的线程(而且只有你的线程——处理器继续执行其他线程)直到拥有互斥量的人释放它,这可能是几秒钟、几分钟甚至几天。 (当然,如果超过几百毫秒,这可能是一个错误。)

最后,信号量和互斥锁;互斥锁可以被认为是一个计数为 1 的信号量。

关于c++ - 锁,内存屏障,信号量之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10552085/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com