使用锁实现多线程共用一个数据源
生活随笔
收集整理的這篇文章主要介紹了
使用锁实现多线程共用一个数据源
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
不直接使用數據服務實例,而是將數據服務實例傳給 DataService 實例。
在需要獲取數據時,傳遞一個 Lambda 函數給DataService 實例去獲取數據,這里就是DataService.GetData方法,在這個方法中對數據提供服務對象進行加鎖,就可以實現多線程安全的訪問同一個數據服務實例。
/// <summary> /// 數據服務,防止多線程同時訪問 IProductService 的數據庫資源。 /// 這個實現并不完善。應該對DbContext加鎖,而不是對一種數據服務實例(目前是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); }?
轉載于:https://www.cnblogs.com/tylerxue/p/5813172.html
總結
以上是生活随笔為你收集整理的使用锁实现多线程共用一个数据源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaScript属性操作
- 下一篇: 原创哈希数据导出算法