1
A
回答
1
它用於提高性能。然後多個併發讀取不會順序發生,如果結構經常讀取,這可能是一個很大的好處。 (但仍然讀取的數據將保持一致並且是最新的。)
0
但是,爲什麼我不能等待鎖定互斥鎖時進行讀操作。
因爲在某些情況下,尤其是那些很多線程經常讀取數據結構的應用程序,這些應用程序效率不高,但很少寫入,而且不是很經常。因爲如果沒有人正在編寫多個併發讀取是線程安全的,那麼爲讀者互相排斥是很浪費的。
想象一下服務器和多個客戶端在某些共享數據上執行各種事務。如果這些客戶中的大多數只是簡單地要求提供信息,而沒有改變任何內容,那麼如果服務器一次只允許一個客戶端閱讀,那麼服務器的性能就會很差。
0
但是爲什麼我不能等待鎖定互斥鎖時進行讀操作。
通常爲速度。共享鎖允許多個閱讀器,因爲內容不變。獨佔鎖只允許一個(通常)寫操作,因爲您希望所有寫操作都是原子操作。
來自here的更多技術定義。
獨佔鎖保護更新文件資源,既採 和不可恢復的。他們只能在 時間內擁有一筆交易。如果 另一個任務當前擁有排除鎖定或共享鎖定爲 請求的資源,則任何需要排他鎖定的事務都必須等待。共享鎖
共享鎖支持讀取完整性。他們確保在只讀請求期間更新過程中記錄不是 。共享的 鎖也可用於防止在讀取記錄的時間 與下一個同步點之間的記錄更新。
相關問題
- 1. MySql-什麼時候應該使用鎖
- 2. 什麼時候應該使用AWS,什麼時候不使用
- 3. 什麼時候應該使用sed,什麼時候應該使用awk
- 4. 什麼時候應該使用memcpy,什麼時候應該使用memmove?
- 5. 什麼時候應該使用Import-Package,什麼時候應該使用Require-Bundle?
- 6. 什麼時候應該使用async/await,什麼時候不用?
- 7. 什麼時候應該使用datagrid,何時應該使用datagridview?
- 8. 什麼時候應該使用$(object),何時應該使用$ object?
- 9. 什麼時候應該使用FSharpFunc.Adapt?
- 10. 什麼時候應該使用_aligned_malloc()?
- 11. 什麼時候應該使用`use`?
- 12. 什麼時候應該使用$ rootScope?
- 13. 什麼時候應該使用$(document).ready?
- 14. 什麼時候應該使用html5 sessionStorage?
- 15. 什麼時候應該使用OWIN Katana?
- 16. 什麼時候應該使用流?
- 17. 什麼時候應該使用Promises?
- 18. 什麼時候應該使用setScriptTimeout?
- 19. 什麼時候應該使用助手?
- 20. 什麼時候應該使用Datomic?
- 21. 我什麼時候應該使用javax.swing.SwingUtilities.invokeLater()?
- 22. 什麼時候應該使用XS?
- 23. 什麼時候應該使用const?
- 24. 什麼時候應該使用退貨?
- 25. 什麼時候應該使用getElementById?
- 26. 什麼時候應該使用Solandra
- 27. 我什麼時候應該使用UITableViewCellSeparatorStyleSingleLineEtched?
- 28. 什麼時候應該使用@android:id /?
- 29. 什麼時候應該使用geom_map?
- 30. 什麼時候應該使用scala.util.DynamicVariable?
您描述的模式是共享鎖和排他鎖的最常見*使用方法,但不是唯一*明智的策略。另一個我曾多次看到,當每個分區擁有一個擁有者的某種數據分區(並且整個數據集由一個鎖保護)時,所有者可以在其自己的分區中讀寫數據與共享鎖,但必須獲得獨佔鎖訪問,讀取或寫入訪問其他分區。當訪問的百分比非常高時,這在所有者的分區內很有效。 – kgrittn