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;
}
}
}
再运行你就不会看到 有问题了
- 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 数组属性和方法
- Python气泡提示与标签的实现
- Django之choices选项和富文本编辑器的使用详解
- Android使用RSA加密和解密的示例代码
- Android布局之帧布局FrameLayout详解
- Okhttp3实现爬取验证码及获取Cookie的示例
- Android监听系统来电并弹出提示窗口
- 你该知道的Gradle配置知识总结
- Android布局之绝对布局AbsoluteLayout详解
- django实现模型字段动态choice的操作
- 详解ASP.NET Core 处理 404 Not Found
- Python AutoCAD 系统设置的实现方法
- Python如何操作office实现自动化及win32com.client的运用
- android Palette调色板使用详解
- python 穷举指定长度的密码例子
- Android 高仿微信朋友圈拍照上传功能