知识大全 详解.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]

详解.NET编程过程中的线程冲突[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一什么是线

知识大全 详解.NET编程过程中的线程冲突[2]

详解.NET编程过程中的线程冲突[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  比如说我在

知识大全 详解.NET编程中的线程冲突

详解.NET编程中的线程冲突  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一什么是线程冲突  

知识大全 .Net Micro Framework线程技术详解

.NetMicroFramework线程技术详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 基于.NET的多线程编程入门

基于.NET的多线程编程入门  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!多线程在构建大型系统的时

知识大全 .NET下的多线程编程应用程序域

.NET下的多线程编程应用程序域  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一应用程序域&n

知识大全 详解.NET中的动态编译[3]

详解.NET中的动态编译[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!usingSystem

知识大全 详解.NET中的动态编译技术[3]

详解.NET中的动态编译技术[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ·创建另外一个

知识大全 浅析Java多线程编程中的高级技术

浅析Java多线程编程中的高级技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb

知识大全 Delphi与SQL Server存储过程编程详解

Delphi与SQLServer存储过程编程详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!