多執行緒 – 讀取時是否需要鎖定物件?
我正在編寫一個程式,其中有一個由多個執行緒共享的物件:
A)多寫寫執行緒寫入物件(全部執行相同
功能)
> B)每5秒訪問一次的執行緒
> C)訪問物件的讀取執行緒有一個使用者請求
顯然,在寫入物件時需要鎖定物件,因為我們不希望多個執行緒同時寫入物件.
我的問題是:
>讀取時還需要鎖定物件嗎?
我正確地認為,如果我們在寫作時鎖定物件,那麼關鍵部分就足夠了但是如果我們在讀取或寫入時鎖定物件,則需要互斥體?
我問這個問題是因為在Microsoft Office中,Word的兩個例項不可能以讀/寫訪問模式訪問文件;但是當文件以讀/寫模式開啟時,可以開啟另一個Word例項以只讀模式訪問文件.執行緒相同的邏輯是否適用?
由於Ofir已經寫過 – 如果您嘗試從某個物件讀取某些其他執行緒的資料,那麼您可能會獲得某些不一致狀態的資料.
但是 – 如果您確定該物件未被修改,您當然可以從多個執行緒中讀取該物件.一般來說,你所問的問題或多或少是讀者作家的問題 – 見ofollow,noindex" target="_blank">http://en.wikipedia.org/wiki/Readers-writers_problem
最後 – 關鍵部分是抽象術語,可以使用互斥體或監視器來實現. Java或C#(同步,鎖定)中關鍵部分的語法糖使用封面下的監視器.
http://stackoverflow.com/questions/2171681/do-i-need-to-lock-object-when-reading-from-it