知识大全 C#多线程中lock的用法

Posted 操作

篇首语:鸟欲高飞先振翅,人求上进先读书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#多线程中lock的用法相关的知识,希望对你有一定的参考价值。

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

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

public class AccessControl()    private static object privateObjectLock = new object();  public static AccessResult()     lock(privateObjectLock)    //数据操作语句      

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

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

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

  class EmailInfo    public static int CurrentNumber;  

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

CurrentNumber=++EmailInfo CurrentNumber;

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

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

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

  lock(this)    _CurrentNumber=++EmailInfo CurrentNumber;  

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

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

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

  先为EmailInfo加一个静态变量

  class EmailInfo    public static object syncRoot = new object();  public static int CurrentNumber;  

  然后lock改为

  lock(EmailInfo syncRoot)    _CurrentNumber=++EmailInfo CurrentNumber;   cha138/Article/program/net/201311/15429

相关参考

知识大全 C#中构建多线程应用程序

C#中构建多线程应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  随着双核四核等多

知识大全 Visual C#中编写多线程程序之起步

VisualC#中编写多线程程序之起步  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  net将关

知识大全 C#创建多线程应用程序

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

知识大全 c#中使用多线程访问winform中控件

  我们在做winform应用的时候大部分情况下都会碰到使用多线程控制界面上控件信息的问题然而我们并不能用传统方法来做这个问题下面我将详细的介绍  首先来看传统方法  publicpartialcla

知识大全 C#多线程编程实例

C#多线程编程实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问题的提出  所谓单个写入程序

知识大全 详细讲解C#的多线程能力

详细讲解C#的多线程能力  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  线程是允许进行并行计算的

知识大全 Visual C#多线程参数传递浅析

VisualC#多线程参数传递浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们在写Rem

知识大全 C#多线程操作控件的两种安全方式

C#多线程操作控件的两种安全方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  实现的功能是  

知识大全 C#多线程学习—生产者和消费者(2)

C#多线程学习—生产者和消费者(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 C#多线程学习—生产者和消费者(3)

C#多线程学习—生产者和消费者(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n