传统的MCS自旋锁包含:(1)一个指针tail指向队列的尾部。队列是空的,tail是空指针。4.1所示,当处理器0申请自旋锁的时候,执行原子交换操作,使tail指向处理器0的mcs_lock_node结构体,并且返回tail的旧值。那么处理器0获得自旋锁。4.2所示,当处理器0占有自旋锁的时候,处理器1申请自旋锁,执行原子交换操作,使tail指向处理器1的mcs_lock_node结构体,并且返回tail的旧值。那么使处理器0的mcs_lock_node结构体的成员next指向处理器1的mcs_lock_node结构体,把处理器1的mcs_lock_node结构体的成员locked设置为1,然后处理器1在自己的mcs_lock_node结构体的成员locked上面自旋等待,等待成员locked的值变成0。:如果tail指向自己的mcs_lock_node结构体,那么把tail设置为空指针。locked字段,指示锁已经被占有,长度是一个字节,占用第0~7位。mcs_nodes的哪一项。2的14次方,那么第9~15位没有使用,第16~17位是index字段,第18~31位是cpu字段。2的14次方,那么第9~10位是index字段,第11~31位是cpu字段。pending位,不需要使用自己的mcs_spinlock结构体。atomic_cmpxchg_acquire()返回锁的旧值。locked,即{tail=0,pending=0,locked=1}。锁的locked字段变成0。第32行代码,成功地获得锁,把锁的状态从pending改成locked,即清除pending位,把locked字段设置为1。第37~43行代码,从本处理器的数组mcs_nodes分配一个数组项,然后初始化。那么处理如下:q第72行代码,把锁的locked字段设置为1。locked字段设置为1。那么把锁的tail字段设置为0,把locked字段设置为1。locked设置为0。パワハラ指切断でおなじみのド屑県香川のド屑企...exodこんにちは。