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();}}
C#多线程lock解决数据同步相关推荐
- Sersync+rsync数据同步实践:快速解决数据同步问题
前言 对于数据的实时同步,例如:某些配置文件或web文件在集群中的同步,通常我们有几种方式: 使用网络raid(例如:nfs/drbd)将某些目录由源服务器挂载到目标服务器(由于网络raid严重依赖网 ...
- java 解决数据同步
最近涉及到一个接口很多的矩阵计算,计算完成后需要获取插入表中新的数据进行计算.部署后因为矩阵计算时间过长有时候会导致后面的数据获取不到报错,最后是加了synchronized代码块进行同步,顺便整理了 ...
- 异地多活场景下的数据同步之道 | 珍藏版
在当今互联网行业,大多数互联网从业者对"单元化"."异地多活"这些词汇已经耳熟能详.而数据同步是异地多活的基础,所有具备数据存储能力的组件如:数据库.缓存.MQ ...
- 物化视图实践(1)----实现远程数据同步
概念: 首先澄清:Oracle9i 以前叫做快照(snapshot),自9i开始更名为物化视图(materialized view) . 早先的关键词snapshot被保留并与materialized ...
- 异地多活场景下的数据同步之道
在当今互联网行业,大多数人互联网从业者对"单元化"."异地多活"这些词汇已经耳熟能详.而数据同步是异地多活的基础,所有具备数据存储能力的组件如:数据库.缓存.M ...
- “游戏数据同步方案”
"游戏数据同步方案" 首先我们介绍实时对战手游中最难解决的技术问题--弱网络下的同步问题. 通过对玩家的游戏数据进行观察,发现玩家的游戏环境存在很大差异,不同玩家会使用不同的2G/ ...
- java 多线程跑数据_java——多线程的实现方式、三种办法解决线程赛跑、多线程数据同步(synchronized)、死锁...
多线程的实现方式:demo1.demo2 demo1:继承Thread类,重写run()方法 packagethread_test;public class ThreadDemo1 extendsTh ...
- 【记录】python多线程的使用 线程同步(LOCK和RLOCK) python与mysql数据库交互实现增加和查找 python的格式化输出
文章目录 多线程: _thread模块 threading模块: 线程同步(LOCK和RLOCK) 和mysql交互: 附:python的格式化输出 附录 多线程: _thread模块 例一 impo ...
- C++多线程快速入门(二)共享数据同步以及数据竞争
目录 std::unique_lock类模板 仅调用一次 线程局部存储 原子变量 往期内容回顾 std::unique_lock类模板 互斥锁保证了线程间的同步,却将并行操作变成了串行操作,对性能有较 ...
最新文章
- 年龄估计bridgeNet
- 安徽工业大学计算机考研调剂,安徽工业大学2019年考研预调剂公告
- 第12章:Linux服务管理
- thinkphp5 两个控制器传参数_thinkphp5控制器向+vue的data里传值
- github gists 101使代码共享漂亮
- HDU Victor and World (最短路+状态压缩)
- 25 个精美的后台管理界面模板和布局
- Visual Studio Code 1.51 发布
- MySql的like语句中的通配符:百分号、下划线和escape
- 【原】iOS触摸事件深度解析
- 如何用TXT文档数据批量制作商品条形码
- 递推算法之平面分割问题总结
- Matlab中散点图绘制详细教程scatter函数(附matlab代码)
- 【Android应用】 九宫格日志
- 2018国内优秀开源镜像站汇总
- 输入框input或内容区域textarea中关于光标移动问题
- Unity3D Maze 迷宫生成算法
- linux 重启startup.sh,centos中startup.sh启动服务脚本
- 【强大图片滤镜插件集】Nik Collection 2 by DxO for Mac 2019
- java爬虫爬豆瓣图书_网络爬虫——爬取豆瓣图书
热门文章
- OpenGL clipdistance剪辑距离实例
- C++longest increasing subsequence 最长递增子序列的实现之二(附完整源码)
- 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC
- 05,pytorch_手写数字案例
- 3Animation动画的创建,CCSpeed,CCFollow
- istringstream字符串流,实现类似字符串截取的功能,字符串流中的put,str()将流转换成为字符串string
- 利用visio在软件开发中各种图
- Java中读取属性文件以及做资源国际化
- Android中多线程下载方面的知识点
- 【C语言】switch…case无break情况(2)