博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#多线程lock解决数据同步
阅读量:6930 次
发布时间:2019-06-27

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

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();        }    }

 

 
 
分类:
+加关注
0
0
上一篇:
下一篇:
posted @ 2017-03-18 09:06 阅读( 411) 评论( 0)
 
(评论功能已被禁用)
最新IT新闻:
·
·
·
·
·
»
最新知识库文章:
·
·
·
·
·
»
历史上的今天:
2014-03-18
2014-03-18
2013-03-18
2013-03-18
2013-03-18
2013-03-18
2013-03-18
2013-03-18
2013-03-18
2013-03-18
2013-03-18
2013-03-18

公告

 
本文转自 博客园博客,原文链接: ,如需转载请自行联系原作者
 
 
你可能感兴趣的文章
1.4. Rosegarden
查看>>
查看oralce的版本及安装了哪些选项
查看>>
uC/OS-II源码分析(四)
查看>>
图像编程魔法门(By C#) 目录
查看>>
cross join
查看>>
jsoup 多个 class Selector 怎么写?
查看>>
让你上瘾的网易云音乐推荐算法,用Word2vec就可以实现
查看>>
[LeetCode] Mini Parser 迷你解析器
查看>>
Android实用代码七段(五)
查看>>
sql 表连接
查看>>
将不确定变为确定~对象被new后什么时候会抛System.NullReferenceException
查看>>
3.5. Filename prefix
查看>>
【sublime Text】sublime Text3安装可以使xml格式化的插件
查看>>
脏读和数据库一致性的分析
查看>>
使用阿里云配置管理ACM实现zookeeper依赖服务的透明Failover迁移
查看>>
Bitbucket免费的私有仓库
查看>>
微信硬件平台智能路由行业解决方案
查看>>
MySQL和Oracle中的隐式转换
查看>>
Qcon大会归来(r12笔记第36天)
查看>>
MapReduce实现倒排索引(类似协同过滤)
查看>>