博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用锁实现多线程共用一个数据源
阅读量:5992 次
发布时间:2019-06-20

本文共 1145 字,大约阅读时间需要 3 分钟。

不直接使用数据服务实例,而是将数据服务实例传给 DataService 实例。

在需要获取数据时,传递一个 Lambda 函数给DataService 实例去获取数据,这里就是DataService.GetData方法,在这个方法中对数据提供服务对象进行加锁,就可以实现多线程安全的访问同一个数据服务实例。

/// /// 数据服务,防止多线程同时访问 IProductService 的数据库资源。/// 这个实现并不完善。应该对DbContext加锁,而不是对一种数据服务实例(目前是IProductService实例)加锁。/// public class DataService{    private static object _lock = new object();    private IProductService _product;    public DataService(IProductService product)    {        _product = product;    }    public T GetData
(Func
func) { lock (_lock) { return func(_product); } }}

 

线程类

private IList
_models = new List
();public IList
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

你可能感兴趣的文章
[翻译] Fast Image Cache
查看>>
iOS UIView动画详解(Objective-C)
查看>>
文件操作的一些疑问
查看>>
【分布式系统工程实现】GFS&Bigtable设计的优势
查看>>
jbpm5.1介绍(5)
查看>>
如何查看数据库中的job任务
查看>>
Objc将数据写入iOS真机的plist文件中
查看>>
Mono 学习之旅二
查看>>
redis 持久化 RDB 和 AOF
查看>>
Android ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多
查看>>
Apache Shiro 关于Shiro 授权
查看>>
我的阿里云探索之路(三)
查看>>
[Java开发之路](8)输入流和输出流
查看>>
MySQL · BUG分析 · Rename table 死锁分析
查看>>
POJ 3566 (弱校联萌十一大决战之厉兵秣马 B. Building for UN)
查看>>
从 left-pad 事件我们可以学到什么
查看>>
mongoDB's GridFS used with replicaSet and sharding
查看>>
DirectIO & BufferedIO
查看>>
python flask介绍
查看>>
霍金警告人工智能危险性 称其若失控很难被阻止
查看>>