Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Linux系統教程 >> Linux教程 >> linux 順序鎖

linux 順序鎖

日期:2017/2/7 14:42:46      編輯: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 © Windows教程網 All Rights Reserved