C#多线程lock解决数据同步
1.代码实例:
public class ThreadTest4 { public static void Init() { //多个线程修改同一个值,使用lock锁解决并发 for (int i = 0; i < 4; i++) { Task.Factory.StartNew(ThreadMethod); } } public static int Number = 1; public static void ThreadMethod() { while (true) { lock (typeof(ThreadTest4)) { Number++; Console.WriteLine("当前线程:{0},Number={1}", Thread.CurrentThread.ManagedThreadId, Number); Thread.Sleep(500); } } } }
使用lock锁前后结果对比:
使用Lock锁前,多线程修改同一数据会出现相同结果,
使用Lock锁后,修改数据保证了数据的在多个线程操作时的同步。
2.使用Lock锁前后的性能对比:
将同一变量Number累加到30,
对于简单内容主线线程执行时间:5.8秒
多线程线程同步执行时间:5.9秒
多线程异步执行时间:1.5秒
结论异步操作性能相对性能提升明显
实例代码:
public class ThreadTest5 { public static void Init() { //多个线程修改同一个值,使用lock锁解决并发 Start = DateTime.Now; for (int i = 0; i < 4; i++) { Task.Factory.StartNew(ThreadMethod); } } public static DateTime Start { get; set; } public static int Number = 1; public static void ThreadMethod() { while (true) { lock (typeof(ThreadTest4)) { Number++; if (Number > 30) { StopHandle(); } Console.WriteLine("当前线程:{0},Number={1}", Thread.CurrentThread.ManagedThreadId, Number); Thread.Sleep(200); } } } //结束处理 public static void StopHandle() { //结束当前线程,并输出代码执行时间 Console.WriteLine("ID={0}线程结束,结束Number={1},执行时长:{2}",Thread.CurrentThread.ManagedThreadId, Number, DateTime.Now-Start); //结束当前线程 Thread.CurrentThread.Abort(); } }
【推荐】腾讯云新用户域名抢购1元起,抓紧抢购
· 阮一峰:加密货币的本质
· ofo被曝订单较峰值跌六成 账户现金仅能支撑一个月
· 途牛宣布一亿美元股票回购计划及CTO任命
· 我们帮你划了一份微信公开课PRO的重点
· iPhone 4S起死回生,可降级至iOS 6.1.3
» 更多新闻...
· 以操作系统的角度述说线程与进程
· 软件测试转型之路
· 门内门外看招聘
· 大道至简,职场上做人做事做管理
2014-03-18 c# 中文字符(全角、半角)通用处理
2014-03-18 存储过程或视图的字符串查询
2013-03-18 利用System.Net.Mail 的SmtpClient发送邮件
2013-03-18 C# HttpWebRequest 方式提交数据,参数为普通键值对
2013-03-18 HttpWebRequest 方式提交文件数据-以图片为例
2013-03-18 HttpWebRequest post提交XMl参数请求,
2013-03-18 C# 手动/自动保存图片
2013-03-18 Request.InputStream 将数据作为XML数据发送
2013-03-18 REST接口POST方法发送文件到服务器(C#)
2013-03-18 C# HttpWebRequest提交数据方式
2013-03-18 自动ping博客服务程序
2013-03-18 C#实现POST提交方式