歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

linux 順序鎖

讀讀不阻塞,

讀寫不阻簺,

寫寫阻塞,



兩個字段

1. spinlock_t 字段, 阻塞寫

2. sequence字段,寫修改, 讀檢查, 值等不等或者是否偶數, 不等或不為偶,重讀





相等且舊值為偶數:無寫者

相等但舊值為奇數:寫者正在寫時讀取sequence值,且還在寫

不等且舊值為偶數,新值為奇數:在寫者之前,開始讀, 但現在已經在寫了

不等且舊值為偶數, 新值為偶數:在寫者之前,開始讀, 但現在寫者也已經完成了

不等且舊值為奇數,新值為奇數:不會出現的case, 這種應該是相等

不等且舊值為奇數, 新值為偶數:在寫者開始之後,開始讀, 但現在寫者也已經完成了





寫獲取鎖:write_seqlock: sequence加1

寫釋放鎖:write_sequnlock: sequence再加1



讀的結構:

unsigned int seq;

do {

seq = read_seqbegin(&seqlock);

/* 臨界區 */

}while (read_seqretry(&seqlock, seq))



要求:

不適合指針

讀者臨界區代碼沒有副作用
 

Copyright © Linux教程網 All Rights Reserved