讀寫鎖分離設計模式

2021-10-07 10:18:04 字數 2008 閱讀 5477

總結對資源的訪問一般包括兩種動作–讀和寫,多執行緒同一時刻對資源讀操作,雖然有資源競爭,但是這種競爭不足以引起資料不一致,那麼這個時候直接採用排他鎖的方式,

就顯得有些粗暴了。

如果對某個資源讀的操作多於寫的操作,那麼多執行緒讀時並不需要加鎖,很明顯對程式效能的提公升有很大的幫助,於是想搞乙個讀寫鎖的簡單實現。

public inte***ce lock
public inte***ce readwritelock 

static readwritelock readwritelock(boolean preferwrite)

}

public class readwritelockimpl implements readwritelock

public readwritelockimpl(boolean preferwriter)

@override

public lock readlock()

@override

public lock writelock()

@override

public int getwaitingwriters()

@override

public int getwritingreaders()

@override

public int getreadingreaders()

void incrementwaitingwriters()

void incrementwritingwriters()

void incrementreadingreaders()

void decrementwaitingwriters()

void decrementwritingwriters()

void decrementreadingreaders()

public object getmutex()

public boolean ispreferwriter()

public void setpreferwriter(boolean preferwriter)

}

public class readlock implements lock

@override

public void lock() throws interruptedexception

}readwritelock.incrementreadingreaders();

}@override

public void unlock()

}

public class writelock implements lock 

@override

public void lock() throws interruptedexception

} finally

readwritelock.incrementwritingwriters();}}

@override

public void unlock() }}

public class sharedata 

}public char read() throws interruptedexception

slowly();

return newbuffer;

} finally

}public void write() throws interruptedexception

} finally

}private void slowly() catch (interruptedexception e) }}

讀寫鎖分離的迴圈佇列

在很多需要高效能的場合下,鎖的設計一直是乙個比較關鍵的問題。無鎖佇列 讀寫鎖分離的佇列在業界以及學術界都已經有很成熟的研究。在網上也有很多資料,但其實有很多實現都是錯誤的。最近在工作中幫忙追查乙個線上問題時,就發現實現乙個正確的版本是比較困難的事情。背景 實現乙個迴圈佇列,佇列長度已預先分配。支援不...

java多執行緒設計模式1 讀寫鎖模式

關於讀寫鎖模式需要明白幾個要素 1 寫 當前沒有寫操作,以及沒有讀操作 2 讀 當前沒有寫操作 package com.puqiuyu.thread.blog.pattern author sunday public class writeandreadlock public writeandrea...

多執行緒 讀寫鎖模式

讀寫鎖 1.寫寫加鎖 2.讀寫加鎖 3.寫都加鎖 4.讀讀不加鎖 public class readwritelock this readingreaders 因為使用了while,所以,當while結束的時候,說明寫完成了.可以讀取資料了.finally public synchronized v...