为什么SpinLock的实现中应该加上PAUSE指令?
当spinlock执行lock()获得锁失败后会进行busy loop(参考这段代码),不断检测锁状态,尝试获得锁。这么做有一个缺陷:频繁的检测会让流水线上充满了读操作。另外一个线程往流水线上丢入一个锁变量写操作的时候,必须对流水线进行重排,因为CPU必须保证所有读操作读到正确的值。流水线重排十分耗时,影响lock()的性能。
恩,支持。现在性能还不在这里。我们保持关注,先从收益大的地方入手。
发布时间: 2013-04-05 10:24:33 作者: rapoo
为什么SpinLock的实现中应该加上PAUSE指令?
当spinlock执行lock()获得锁失败后会进行busy loop(参考这段代码),不断检测锁状态,尝试获得锁。这么做有一个缺陷:频繁的检测会让流水线上充满了读操作。另外一个线程往流水线上丢入一个锁变量写操作的时候,必须对流水线进行重排,因为CPU必须保证所有读操作读到正确的值。流水线重排十分耗时,影响lock()的性能。
恩,支持。现在性能还不在这里。我们保持关注,先从收益大的地方入手。