学习C 学习C语言用什么软件
创始人
2024-05-05 08:50:24
0

学习C#多线程:简单的代码

经常碰到同时需要对某个数据进行操作,或者对某个文件进行读写操作,对于这些操作我们以前往往不能很好的进行处理,自从C#语言中引入了lock这个关键字,以上问题就比较容易予以解决了,下面就是一段简单的代码。

  1. public class AccessControl()  
  2.   {  
  3.   private static object privateObjectLock = new object();  
  4.   public static AccessResult()  
  5.    {  
  6.   lock(privateObjectLock)  
  7.   {  
  8.   //数据操作语句  
  9.   }  
  10.   }  
  11.   }   

学习C#多线程:邮箱问题

在做邮箱接收网关的时候遇到了以下的需求,要求为每一个邮箱开启一个接收线程,从POP3服务器上收取,然后将邮件存放到统一的FTP服务器上,要求邮件按收接顺充从1开始顺充编号。

我实现的方法为,为每个邮箱new出实例,然后分别赋给POP3邮箱地址,用户名,密码等参数。这里涉及到一个编号同步的问题,因为每个接收邮件的线程都是自己执行,所以取得编号并且递增这个动作是互斥的。

以一个静态变量表示编号如下

  1.   class EmailInfo  
  2.   {  
  3.   public static int CurrentNumber;  
  4.   }   

那在当前线程取得这个步骤为

  1. _CurrentNumber=++EmailInfo.CurrentNumber;   

虽然此为一句,但在计算机运行时却分为多步,如下

  EmialInfo.CurrentNumber加1--EmailInfo.CurrentNumber返回值给_CurrentNumber,也许线程1执行了EmailInfo.CurrentNumber加1 的操作,但还没有取得返回值,此时线程2又执行了EmailInfo.CurrentNumber加1的操作,然后又线程1,线程2取得了返回值就是一样的,这样就失去了按顺序递增的作用。

此时查找了网上有关线程同步的方法,其实用lock语句锁住递增的那一段即可。而介绍的相关用法为

  1.   lock(this)  
  2.   {  
  3.   _CurrentNumber=++EmailInfo.CurrentNumber;  
  4.   }   

本以为这样就可以成功,谁知道还是无效,反复查找才发现没弄清楚lock的用法。因为网上所讲的资料,举的例子比较简单,是直接new 出一个对像,然后为对像的一个函数创建了多个线程运行,所以它的同步只要lock住this即它自己就行了。因为此时只有一个实例在运,而我是new 出了多个对像,lock住每个自己的实例所以当然无效。

所以自然想了一个解决方法,就lock住相同的一个实例就行了。

因为我每个邮件接收线程的参数都是不同的,所以还是new出几个实像,但lock的方法改为如下

先为EmailInfo加一个静态变量

  1.   class EmailInfo  
  2.   {  
  3.   public static object syncRoot = new object();  
  4.   public static int CurrentNumber;  
  5.   }  然后lock改为  
  6.   lock(EmailInfo.syncRoot)  
  7.   {  
  8.   _CurrentNumber=++EmailInfo.CurrentNumber;  
  9.   }   

即可实现想要的效果了。这样,就解决了C#多线程学习过程中遇到的lock的用法问题。

【编辑推荐】

  1. 学习C#接口继承
  2. 学习C#接口编程——显式实现C#接口成员
  3. 学习C#接口编程——C#接口转换
  4. C#反射访问属性规范及示例
  5. C#操作符之IS与AS:安全的强制类型转换

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...