多线程编程 什么时候使用 lock?
来源:互联网 发布:广电网络三网融合wifi 编辑:程序博客网 时间:2024/06/05 12:48
在多线程编程中最难控制的就是对于同一个对象的并发访问(读写),如果同步没有做到位,可能导致意料之外的情况发生。当所有线程共享一些变量或者对象时,一定要对改变此变量或对象的代码段加锁。
namespace CheckedAndUnchecked{ class Programprivate static int Count = 0; static void Main(string[] args) { Thread thread1 = new Thread(new ThreadStart(Method)); thread1.Start(); Thread thread2 = new Thread(new ThreadStart(Method)); thread2.Start(); } static void Method() { for(int i = 0; i < 10; i++) { int curVal = ++Count; Thread.Sleep(100); string output = string.Format("当前线程curVal :{0}, 当前Count:{1}", curVal, Count); } } }}
输出的curVal 和Count通常不等,说明Count被其他线程篡改了。要避免本线程正在使用的共享变量和对象被其他线程篡改,可以使用lock语句对该段程序加锁。
private static object MethodLock = new object(); static void Method(){ for(int i = 0; i < 10; i++) { lock(MethodLock ) { int curVal = ++Count; Thread.Sleep(100); string output = string.Format("当前线程curVal :{0}, 当前Count:{1}", curVal, Count); } }}
0 0
- 多线程编程 什么时候使用 lock?
- 多线程编程学习四(Lock 的使用)
- 什么时候该使用多线程
- 什么时候使用多线程
- 什么时候使用多线程
- 什么时候使用多线程
- 什么时候使用多线程
- Python多线程编程(threading ):使用Lock互斥锁RLock
- Java多线程编程4--Lock的使用--重入锁(ReentrantLock)、Condition
- Java多线程编程4--Lock的使用--相关方法
- 《java多线程编程核心技术》核心笔记(三) Lock的使用
- 《java多线程编程核心技术》读书笔记4:Lock的使用
- 《Java多线程编程核心技术》(四)Lock的使用
- 《多线程编程》学习之九:Lock的使用
- Java多线程编程核心技术--Lock的使用(一)
- Java多线程编程核心技术(第四章Lock的使用)
- java多线程编程核心技术4-Lock的使用
- 多线程编程核心技术读书笔记(四):Lock的使用
- Mac安装Caffe心得体会
- LeetCode 1 : Two Sum ---- 哈希&数组
- iOS文字渐变效果实现
- jqgrid快速入门之二:不用url,自己构造表格数据源
- AngularJS的学习--$on、$emit和$broadcast的使用
- 多线程编程 什么时候使用 lock?
- Codeigniter框架的更新事务(transaction)BUG及解决方法
- <a href=”#”>与 <a href=”javascript:void(0)” 的区别
- 跳跃链表 skipList
- 环境变量
- HDU-1698-Just a Hook(再写Lazy)
- 常用是三方库_插件等汇总
- MySQL性能优化必备25条
- PHP CURL接口问题