知识大全 详解.NET编程过程中的线程冲突[3]
Posted 知
篇首语:好人的天生欲望是知识。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 详解.NET编程过程中的线程冲突[3]相关的知识,希望对你有一定的参考价值。
详解.NET编程过程中的线程冲突[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
四 互斥锁
有时候我们不得不面对线程不安全的问题 比如说在一开始提出来的那个例子 多线程完成 次任务 我们怎样才能解决这个问题 一个简单的办法就是给共享资源加上互斥锁 在C#中这很简单 比如一开始的那个例子
public static class Environmentpublic static int count = ;//全局计数器//…void ThreadMethod()//运行在每个线程的方法while( true )lock ( typeof( Environment ) )if ( count >= )//如果达到任务指标break;//中断线程执行DoSomething();//完成某个任务count++;
通过互斥锁 使得一个线程在使用count字段的时候 其他所有的线程都无法使用 而被阻塞等待 达到了避免线程冲突的效果
当然 这样的锁会使得这个多线程程序退化成同时只有一个线程在跑 所以我们可以把count++提前 使得lock的范围缩小 如这样
void ThreadMethod()//运行在每个线程的方法while( true )lock ( typeof( Environment ) )if ( count++ >= )//如果达到任务指标break;//中断线程执行DoSomething();//完成某个任务
最后来聊聊SyncRoot的问题
用 NET的一定会有很多朋友困惑 为什么对一个容器加锁 需要这样写
lock( Container SyncRoot )而不是直接lock( Container )
因为锁定一个容器并不能保证不会对这个容器进行修改 考虑这样一个容器
public class Collectionprivate ArrayList _list;public Add( object item )_list Add( item );public object this[ int index ]get return _list[index]; set _list[index] = value;看起来 将其lock起来后 就万事大吉了 没有人能修改这个容器 但实际上这个容器不过是用一个ArrayList实例来实现的 如果某段代码绕过这个容器而直接操作_list的话 则对这个容器对象lock也不可能保证容器不被修改了
cha138/Article/program/net/201311/15565相关参考
详解.NET编程过程中的线程冲突[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一什么是线
详解.NET编程过程中的线程冲突[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 比如说我在
详解.NET编程中的线程冲突 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一什么是线程冲突
知识大全 .Net Micro Framework线程技术详解
.NetMicroFramework线程技术详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
基于.NET的多线程编程入门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!多线程在构建大型系统的时
.NET下的多线程编程应用程序域 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一应用程序域&n
详解.NET中的动态编译[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!usingSystem
详解.NET中的动态编译技术[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ·创建另外一个
浅析Java多线程编程中的高级技术 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
知识大全 Delphi与SQL Server存储过程编程详解
Delphi与SQLServer存储过程编程详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!