!--NEWSZW_HZH_BEGIN--
为何我们须要自旋锁?
用闩锁同步多个线程间数据构造拜访,在每一个同享数据构造前都放置一个闩锁没成心义的。闩锁与此紧密关联:当你不能取得闩锁(由于其他人已有一个不兼容的闩锁拿到),查询就会强迫期待,并进入挂起(SUSPENDED)状况。查询在挂起状况期待直到可以拿到闩锁,然后就会进入可履行(RUNNABLE)状况。对查询履行只要没有可用的CPU,查询就一直在可履行(RUNNABLE)状况。一旦CPU有空闲,查询会进入运行(RUNNING)状况,最后胜利获得到闩锁,用它来掩护拜访的同享数据构造。下图展现了SQLOS对调和线程调度实现的状况机。
用闩锁同步多个线程间数据构造拜访,