2012-08-31 29 views
1

有人可以解釋何時應該使用共享鎖。如果我理解正確,在讀寫時使用共享鎖並使用獨佔鎖。什麼時候應該使用共享鎖

但是,爲什麼我不能等待鎖定互斥鎖時進行讀操作。

+0

您描述的模式是共享鎖和排他鎖的最常見*使用方法,但不是唯一*明智的策略。另一個我曾多次看到,當每個分區擁有一個擁有者的某種數據分區(並且整個數據集由一個鎖保護)時,所有者可以在其自己的分區中讀寫數據與共享鎖,但必須獲得獨佔鎖訪問,讀取或寫入訪問其他分區。當訪問的百分比非常高時,這在所有者的分區內很有效。 – kgrittn

回答

1

它用於提高性能。然後多個併發讀取不會順序發生,如果結構經常讀取,這可能是一個很大的好處。 (但仍然讀取的數據將保持一致並且是最新的。)

0

但是,爲什麼我不能等待鎖定互斥鎖時進行讀操作。

因爲在某些情況下,尤其是那些很多線程經常讀取數據結構的應用程序,這些應用程序效率不高,但很少寫入,而且不是很經常。因爲如果沒有人正在編寫多個併發讀取是線程安全的,那麼爲讀者互相排斥是很浪費的。

想象一下服務器和多個客戶端在某些共享數據上執行各種事務。如果這些客戶中的大多數只是簡單地要求提供信息,而沒有改變任何內容,那麼如果服務器一次只允許一個客戶端閱讀,那麼服務器的性能就會很差。

0

但是爲什麼我不能等待鎖定互斥鎖時進行讀操作。

通常爲速度。共享鎖允許多個閱讀器,因爲內容不變。獨佔鎖只允許一個(通常)寫操作,因爲您希望所有寫操作都是原子操作。

來自here的更多技術定義。

獨佔鎖保護更新文件資源,既採 和不可恢復的。他們只能在 時間內擁有一筆交易。如果 另一個任務當前擁有排除鎖定或共享鎖定爲 請求的資源,則任何需要排他鎖定的事務都必須等待。共享鎖

共享鎖支持讀取完整性。他們確保在只讀請求期間更新過程中記錄不是 。共享的 鎖也可用於防止在讀取記錄的時間 與下一個同步點之間的記錄更新。

相關問題