我正在爲相對靜態的數據創建自定義緩存對象,並且定期從數據庫更新數據。我選擇使用強類型的DataSet來存儲緩存的數據。現在,通過ReaderWriterLockSlim同步訪問讀取和刷新(客戶端無法寫入緩存,只刷新它)自定義緩存對象。然而,我想確保緩存的客戶端不能通過同時修改其組成對象來破壞強類型數據集中的數據(數據表,數據行等),即使客戶端不應該更改數據。因此,我的方法是在查找緩存項時,克隆強類型DataSet並填充所需行及其相關父/子行的副本並將其返回給客戶端。基本上,將不可變緩存數據的副本返回給客戶端,因此即使他們嘗試修改它,也不會影響其他線程。哪些ADO.NET DataSet/DataTable方法對多讀者線程安全?
我的問題是,這可以安全地在ReaderWriterLockSlim讀鎖內完成嗎?更直接地說,像DataSet.Clone,DataTable.ImportRow這樣的方法對讀者線程來說本質上是安全的,也就是說他們對克隆/複製的對象是隻讀操作嗎?考慮從MSDN文檔的DataSet,DataTable中本說明等
「這種類型是安全的多線程讀操作,你必須同步任何寫操作。」
來自文檔的引用確實回答了您的問題 - 它對於讀取操作是線程安全的。 – 2013-04-22 20:07:48