.NET简谈组件程序设计之(上下文与同步域)

来源:深度训练(DotNet专场) 责任编辑:栏目编辑 发表时间:2013-07-01 05:53 点击:

我们继续学习.NET多线程技术,这篇文章的内容可能有点复杂。在打破常理之后,换一种新的思考模型最为头疼。这篇文章里面会涉及到一些不太常见的概念,比如:上下文、同步域等等。我也是最近才接触这些关于组件编程方面的高深技术,大家一起学习,再大的困难也是有时间限制的,只要我们坚持。

在本人的上一篇文章“.NET简谈组件程序设计之(多线程与并发管理一)”中,只是初步的带领我们学习一下关于多线程的一些基本的原理,包括线程切换,线程的开始、执行、等待、结束。

这篇文章的重点是学习关于线程的同步、互斥的机制。在多线程的应用程序中,最少会有一个主线程在运行着,如果我们想提高应用程序的吞吐量就必须借助多线程的原理来实现。[王清培版权所有,转载请给出署名]

.NET上下文(ContextBoundObject对象)

什么叫上下文,千万别和ASP.NET中的上下文搞混了,这个上下文是个形容词,在不同的场合有不同的意思。在ASP.NET中的上下文是指Context对象,这个对象基本上包容了HTTP协议的整个生命周期的信息,可以获取到客户端浏览器的一些基本信息,也可以获取到关于HTTP协议的一些信息,等等。

这里所讲的上下文是.NET程序执行的最小逻辑范围,ASP.NET上下文是站在B/S编程模型角度去看待的,而这里的上下文是站在.NET底层运行角度看来的,后者是代码的上下文,前者是整个生命周期的上下文。

在没有接触ContextBoundObject之前我一直以为.NET程序执行的最小逻辑范围是应用程序域(AppDomain),知道了之后才知道另有隐情,上下文是用来确定对象的逻辑归属,在多线程(Thread)、事物处理(Transaction)、企业服务(Enterprise)等方面都需要用上下文来对对象进行规划。下面您将看到怎么用上下文来进行线程的同步的。

图1:

.NET同步域(Synchronization特性)

同步域的概念是来源于多线程的场合,在我们进行多线程操作的时候,让很多个线程去同时访问一个内存对象的时候,是必须用锁来保证只有一个线程进入对象操作的,那么同步域的概念就是同步的是一个区域,而不是单单的一个对象。

线程是代码的执行路径,只要在这条执行路径上都属于线程的范围,那么怎么在执行的路径中分离出另外一个同步区域。[王清培版权所有,转载请给出署名]

临界资源是系统中对同一时间只能由一个线程进行访问的描述。我们假设自己就是一个线程,我们要去家里拿点东西,那么门就是线程的同步锁,当我们进去的时候就把门从里面反锁,出去的时候就把门打开,以方便自己的家人进来。这个房子就是临界资源。可能这样的描述不太靠谱,哪有这样的家啊!

图2:

利用上下文和同步域进行线程的同步

下面我们将结合上下文和同步域的原理进行线程的同步。请看一段代码:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Threading;  
  5. using System.Runtime.Remoting;  
  6. using System.Runtime.Remoting.Contexts;  
  7.  
  8. namespace ConsoleApplication1.多线程和并发管理  
  9. {  
  10.     //如果不加上下文,那么就是以对象为线程锁定区域,如果加上下文,那么就是已逻辑上下文为锁定区域  
  11.     [Synchronization(SynchronizationAttribute.REQUIRED, true)]//重新进入同步域  
  12.     public cl

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • 浅析.NET下XML数据访问新机制
      • asp.net 面试+笔试题目第1/2页
      • C# 邮件地址是否合法的验证
      • asp.net 设置GridView的选中行的实现代码
      • C#高级编程:数据库连接[1]
      • 经典C++程序1
      • IIS 自动回收导致后台定时器失效的问题解决
      • ASP.NET GridView列表代码示例
      • Asp.net MVC源码分析--Action Filter的链式调用
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1