lock小记
时间:2022-04-25
本文章向大家介绍lock小记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
都快把lock忘了用wcf 给手持设备做服务的时候可能会有并发操作但又忘了lock的使用情况
做个小例子,怕自己再忘了
不加lock的时候 结果可能 是负的下面有图,我们设想 的是不会有负数,
但是多个线程访问的时候就会出现这个问题,一个线程在访问的时候别其它的线程也在访问DoFun这个方法
就会出现错误就想办法让一个线程在处理DoFun的时候别的线程等待
static int myIndex = 50;
static int MyMinus = 100;
static object objLock = new object();
static void Main(string[] args)
{
#region
Thread _thread ;
while (myIndex>0)
{
try
{
_thread = new Thread(new ParameterizedThreadStart(DoFun));
_thread.Start((object)myIndex--);
}
catch (Exception ex)
{
Console.WriteLine("程序错误!");
return;
}
}
Console.ReadLine();
#endregion
}
public static void DoFun(object s)
{
if (MyMinus < 0)
{
throw new Exception("NegativeNo");
}
if (MyMinus > (int)s)
{
Thread.Sleep(500);
MyMinus = MyMinus - (int)s;
Console.WriteLine("Console:" + MyMinus.ToString());
}
else
{
Console.WriteLine("no!!!!");
return;
}
}
于是乎就用到 了lock我们用它把DoFun改写一下吧不过要注意死锁问题,
大家可以看一下msdn是怎么说的
public static void DoFun(object s)
{
if (MyMinus < 0)
{
throw new Exception("NegativeNo");
}
lock (objLock)
{
if (MyMinus > (int)s)
{
Thread.Sleep(500);
MyMinus = MyMinus - (int)s;
Console.WriteLine("Console:" + MyMinus.ToString());
}
else
{
Console.WriteLine("no!!!!");
return;
}
}
}
再运行你就不会看到 有问题了
- MOTS攻击之TCP攻击
- iOS学习——获取当前最顶层的ViewController
- 中国深圳一家厂商的智能摄像头曝出漏洞:至少 17.5 万设备可被远程攻击
- iOS学习——Xcode9上传项目到GitHub
- 手把手教你编写一个简单的PHP模块形态的后门
- 如何将简单的Shell转换成为完全交互式的TTY
- 如何使用HackRF做一个简单的IMSI捕获器
- 联想Z470黑化之路:硬件升级还能刷苹果Mac系统!
- 渗透测试TIPS之删除、伪造Linux系统登录日志
- 1分钟懂awk-技不在深,够用就行
- RChain节点通信机制
- Spark源码系列(一)spark-submit提交作业过程
- Android安全几道入门题目
- 挖洞经验 | 看我如何通过子域名接管绕过Uber单点登录认证机制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- K8S 生态周报| Traefik v2.3.0-rc2 发布
- 如何从 Notion 批量导出 Markdown?
- 【LeetCode】1518. 换酒问题
- OBS推流工具使用说明
- Python多进程
- app反编译遇到360加固,傻瓜式脱壳
- Java底层-本地接口(JNI)
- 如何从最坏、平均、最好的情况分析复杂度?
- 利用Python进行MR栅格数据处理
- 利用Sql处理MR栅格数据
- Netty组件之Channel注册
- 使用 kubeadm 安装单 master kubernetes 集群
- 垃圾回收算法(4)-复制算法
- Digital-Signature-Hijack:一款针对数字签名劫持的PowerShell脚本
- 使用TensorFlow物体检测模型、Python和OpenCV的社交距离检测器