博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lock锁
阅读量:6513 次
发布时间:2019-06-24

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

原文:

lock

临界资源:一次仅允许一个进程使用的共享资源。

临界区:每个进程中访问临界资源的那段代码称为临界区,对于同一个临界资源,可以有多个临界区。

lock关键字可以确保当一个线程位于代码临界区时,另一个线程不会进入临界区。如果其他线程尝试进入锁定的代码,则它将一直等待(即锁定),直到该对象被释放。

lock关键字在块的开始处调用Enter,而在块的结尾处调用Exit。通常,应避免锁定public类型,否则实例将超出代码的控制范围。

Enter指的是Monitor.Enter(获取指定对象上的排他锁),Exit值的是Monitor.Exit(释放指定对象上的排他锁),这里的指定对象代表临界资源。

下面来说说,我在中的代码,程序会将监听目录下面的新图片文件保存到一个字典中。

这里的_fileList就是我们的临界资源。向字典中添加内容,这个是操作系统的监听线程去完成的。

将图片上传到服务器,然后从字段中删除上传过的数据。这个操作是我们自己开启的一个上传线程。

 

由于SaveFile方法中操作字典的长度,那么问题来了:如果上传的时候,监听线程又向字典中写入数据,就会造成数据的混乱。通过对字典加锁,可以避免对字典的同时操作:

//监听处理:在文件创建或更改时,将
<图片名称,图片地址>
保存到字典中private void WatchProcess(FileSystemEventArgs e){ //进行字典记录更新 lock (_fileList) { _fileList[fileName] = e.FullPath; } }}
//上传图片private void SaveFile(){    while (true)    {        //从Dictionary中移除添,即使保存出错,也删除,防止错误驻留在程序中        lock (_fileList)        {            foreach (var i in stringKeys)            {                _fileList.Remove(i);            }        }    }}

 

转载地址:http://mwsfo.baihongyu.com/

你可能感兴趣的文章
jquery 1.6以上版本 全选
查看>>
AppCan 学习
查看>>
flask框架
查看>>
《疯狂Java讲义》学习笔记(十)异常处理
查看>>
ELK 5.x日志分析 (二) Elasticserach 5.2 安装
查看>>
一次奇怪的AP注册异常问题处理
查看>>
TableStore: 海量结构化数据分层存储方案
查看>>
java SpringUtil获取bean
查看>>
赛门铁克开启“容灾即服务”时代
查看>>
复杂度归纳--小结
查看>>
跨越企业的“中等收入陷阱”
查看>>
luogu P1280 尼克的任务 序列DP
查看>>
sys.check_constraints
查看>>
#define WIN32_LEAN_AND_MEAN 的作用
查看>>
仿余额宝数字跳动效果 TextCounter
查看>>
你必须知道的.net学习总结
查看>>
Axure8.0 网页 or App 鼠标滚动效果
查看>>
大家好,新年快乐。
查看>>
labview如何弹出提示窗口_LabVIEW开发者必读的问答汇总,搞定疑难杂症全靠它了!...
查看>>
jquery 乱码 传参_jquery获取URL中参数解决中文乱码问题的两种方法
查看>>