天天看點

自旋鎖的使用spin_lock

 在驅動中經常需要使用自旋鎖來確定一個固定序列操作不被打斷。

/* 初始化鎖x為,非鎖定狀态 */
spin_lock_init(x);

/* 可以用在中斷中的,鎖的處理 */
/* 如下不會改變中斷目前狀态 */
int flags;
spin_lock_irqsave(&x, flags);
spin_unlock_irqrestore(&x, flags);
/* 如下會改變中斷目前狀态 */
spin_lock_irq(&x);
spin_unlock_irq(&x);

/* 不會用在中斷中的,鎖的處理,*/
/* 比可能用在中斷中的鎖速度更快,少了開關中斷的操作 */
spin_lock(&x, flags);
spin_unlock(&x, flags);

/* 以上是對于多core處理器來說的,對于單core,可以用直接關閉或打開中斷就行。 */
           

繼續閱讀