关于ll/sc指令

ls/sc指令对主要的应用场合在多线程环境,有必要先来了解一下什么是ABA问题 。这个问题,简单的说来,是破坏了一个假设,即如果前后从同一位置读取的值相同,那么在这两次读之间这个位置的值就从未改变过。也许这个问题,改个名字叫做RWR问题来的更加直观。至于这个问题是否成其为一个问题,这里就不赘述了。

实际上,类似的ll/sc的CAS(compare-and-swap )操作就基于上面提到的假设。对基于ld/st的RISC体系结构来说,CAS的方法是不合理的,所以才需要ll/sc。CAS在软件事务内存(STM)中的应用 已经有人研究过,但是ld/st对STM的支持还没见到有人研究?

实现ll/sc的关键在于CPU(from programmer's view)对load-locked操作的内存位置发生的写操作的监视。如果这个位置可以缓存(该位置是否可以缓存依赖实现)的,这个任务会通过缓存监听逻辑实现。这里有个粒度的问题,粒度越大,目标位置附近越大范围的内存修改都会让cpu觉察到,从而引起sc失败。

猜你喜欢

转载自geekish.iteye.com/blog/1174994
sc"
sc
lL