当前位置:  编程技术>.net/c#/asp.net

描述C#多线程中lock关键字的使用分析

    来源: 互联网  发布时间:2014-10-21

    本文导语:  本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。每个线程都有自己的资源,但是代码区是共享的,即每...

本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。
每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。
C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。在C# lock关键字定义如下:
lock(expression) statement_block
expression代表你希望跟踪的对象,通常是对象引用。
如果你想保护一个类的实例,一般地,你可以使用this;如果你想保护一个静态变量(如互斥代码段在一个静态方法内部),一般使用类名就可以了。
而statement_block就是互斥段的代码,这段代码在一个时刻内只可能被一个线程执行。
下面是一个使用C# lock关键字的典型例子,在注释里说明了C# lock关键字的用法和用途。
示例如下:
代码如下:

using System;
using System.Threading;
namespace ThreadSimple
{
    internal class Account
    {
        int balance; //余额
        Random r=new Random();
        internal Account(int initial) 
        { 
            balance=initial;
        }
        internal int Withdraw(int amount) //取回、取款
        {
            if(balance=amount)
                {
                    Thread.Sleep(5);
                    balance=balance-amount;
                    return  amount;
                }  else
                {
                    return 0;
                    //transactionrejected
                }
            } 
        }
        internal void DoTransactions()//取款事务
        {
            for (int i = 0; i < 100; i++)
            {
                Withdraw(r.Next(-50, 100));
            }
        }
    }  
    internal class Test 
    { 
        static internal Thread[] threads=new Thread[10];
        public static void Main() 
        { 
            Account acc=new Account(0);
            for(int i=0;i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C/C++ 数据类型描述及类型修饰符介绍
  • 文件描述符集fd_set * readfds;书上这样描述数组元素的每一位对应一个文件描述符,第一个元素代表文件描述符0到31,数组第二个元素代表文
  • CPU如何知道CS寄存器内装的是LDTR指向的描述符表的段选择符还是GDTR指向的描述符表的段选择符呢?
  • TCP连接中创建的监听描述字和已连接描述字(套接字)对应的是同一个套接口么,如果是的话,读写数据时系统怎么区分是哪个套接字的?
  • 关于文件描述符问题
  • UNIX的文件描述符传递问题
  • 文件描述的回收问题,谢谢
  • 矢量图形描述语言 Asymptote
  • 文件描述符的限制?(共享内存)
  • 哪里有ejb部署文件的 dtd描述
  • 文件描述符
  • 请问FILE结构体和文件描述符有什么联系?谢谢
  • XML描述的GUI框架 Gui4j
  • 流程描述图形编辑器 JPEd
  • 中断描述符表(IDT)问题
  • 监视文件和目录文件描述符的问题
  • 请高手指教:段描述符与段页机制的问题
  • 文件描述符的数据结构在哪定义?
  • 文件描述的回收问题,谢谢 iis7站长之家
  • 文件描述符,文件句柄的区别?
  • 怎样用描述符重新打开文件?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3