使用锁实现多线程共用一个数据源
生活随笔
收集整理的這篇文章主要介紹了
使用锁实现多线程共用一个数据源
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
不直接使用數(shù)據(jù)服務(wù)實例,而是將數(shù)據(jù)服務(wù)實例傳給 DataService 實例。
在需要獲取數(shù)據(jù)時,傳遞一個 Lambda 函數(shù)給DataService 實例去獲取數(shù)據(jù),這里就是DataService.GetData方法,在這個方法中對數(shù)據(jù)提供服務(wù)對象進行加鎖,就可以實現(xiàn)多線程安全的訪問同一個數(shù)據(jù)服務(wù)實例。
/// <summary> /// 數(shù)據(jù)服務(wù),防止多線程同時訪問 IProductService 的數(shù)據(jù)庫資源。 /// 這個實現(xiàn)并不完善。應(yīng)該對DbContext加鎖,而不是對一種數(shù)據(jù)服務(wù)實例(目前是IProductService實例)加鎖。 /// </summary> public class DataService {private static object _lock = new object();private IProductService _product;public DataService(IProductService product){_product = product;}public T GetData<T>(Func<IProductService,T> func){lock (_lock){return func(_product);}}}?
線程類
private IList<MonitorModel> _models = new List<MonitorModel>(); public IList<MonitorModel> Models {get{if (_models.Count == 0){_models = _dataService.GetData(s => s.Models.Where(m => m.IsEnabled == true).ToList().ToMonitorModelList());}return _models;} }private DataService _dataService; public LocalFileMonitor(IProductService productService) : base() {_dataService = new DataService(productService); }?
轉(zhuǎn)載于:https://www.cnblogs.com/tylerxue/p/5813172.html
總結(jié)
以上是生活随笔為你收集整理的使用锁实现多线程共用一个数据源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript属性操作
- 下一篇: 原创哈希数据导出算法