任何人都可以解释一下如何使用intrensic原子函数作为信号量的替代品吗?
Renetly我遇到了一个问题,由于规范订单违反信号量使用,cpu停止了。通过使用intrensic原子函数而不是获取信号量来获取对cpu全局内存的锁定来修复此问题。
我没有理解这种用于访问cpu全局内存的intrensic原子函数用法。
谢谢, Ivak。
答案 0 :(得分:0)
事实上,信号量依赖于原子函数(在大多数实现中) - 查看spinlocks - 这些类似于具有不同性能特征的低级信号量。
然而,有时情况下临界区域的操作如此简单以至于可以原子方式完成 - 例如递增一个柜台。还有更复杂的事情,比如将一个元素排入队列,这可以通过原子来完成(尽管不只是单个操作)。
无论如何,使用信号量可能会在某些情况下导致死锁,使用无锁操作只是不锁定任何东西,所以你不能违反锁定顺序。
当然,原子操作并不是一切都有能力,有些数据结构不能无锁,有时你会在网络上做一个复杂的操作,在此期间你必须被锁定......仍然需要信号量。 / p>
有了使用原子的错误代码,即使你最终没有一个永远睡在信号量上的线程,你最终也会有一个循环旋转的线程。