理解c#多线程中的lock关键字

转载 2011年01月24日 00:08:00

using System;
using System.Threading;

internal class Account
{
    int balance;
    Random r = new Random();
    internal Account(int initial)
    {
        balance = initial;
    }

    internal int Withdraw(int amount)
    {
        if (balance < 0)
        {
            throw new Exception("Negative Balance");
        }

        lock (this)
        {
            Console.WriteLine("Current Thread:" + Thread.CurrentThread.Name);

            if (balance >= amount)
            {
                Thread.Sleep(50);
                balance = balance - amount;
                return amount;
            }
            else
            {
                return 0;
            }
        }
    }
    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 < 10; i++)
        {
            Thread t = new Thread(new ThreadStart(acc.DoTransactions));
            threads[i] = t;
        }
        for (int i = 0; i < 10; i++)
            threads[i].Name = i.ToString();
        for (int i = 0; i < 10; i++)
            threads[i].Start();
        Console.ReadLine();
    }
}

c#多线程中Lock()关键字的使用

本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。 每个线程...
  • jintougao
  • jintougao
  • 2013年05月22日 16:57
  • 7736

C#之lock关键字 lock锁定语句

lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。下面的示例包含一个 lock 语句。 class Account ...
  • makenothing
  • makenothing
  • 2014年04月24日 10:06
  • 1398

Java并发——线程同步Volatile与Synchronized详解

Java面试——线程同步volatile与synchronized详解 0. 前言面试时很可能遇到这样一个问题:使用volatile修饰int型变量i,多个线程同时进行i++操作,这样可以实现线程安全...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年08月30日 19:09
  • 13426

描述C#多线程中 lock关键字

本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。   ...
  • yaozhichao1
  • yaozhichao1
  • 2013年10月21日 14:53
  • 290

多线程(三):lock 关键字

包括 lock 和synchronized 的区别;Lock 接口的6个方法;ReentrantLock;ReadWriteLock,以及可中断锁和公平锁的一些知识。...
  • u014077165
  • u014077165
  • 2015年03月10日 21:38
  • 480

Java 多线程:Lock 关键字

sleep() & interrupt()线程A正在使用sleep()暂停着: Thread.sleep(100000); 如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用 a.in...
  • Allen215902
  • Allen215902
  • 2016年03月14日 21:53
  • 482

C# 多线程详解 Part.04(Lock、Monitor、生产与消费)

系列1 曾经说过:每个线程都有自己的资源,但代码区是共享的,即每个线程都可以执行相同的函数。        这可能带来的问题就是多个线程同时执行一个函数,并修改同一变量值,这将导致数据的混乱,产...
  • my98800
  • my98800
  • 2018年01月05日 10:00
  • 25

C#多线程学习(九)lock,Monitor,Mutex的区别

lock和Monitor的区别 一、lock的底层本身是Monitor来实现的,所以Monitor可以实现lock的所有功能。 二、Monitor有TryEnter的功能,可以防止出现死锁的问题,...
  • liming850628
  • liming850628
  • 2016年02月23日 15:30
  • 1155

c#初学-多线程中lock用法的经典实例

一、Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,...
  • XPY567
  • XPY567
  • 2016年01月15日 01:42
  • 249

c#初学-多线程中lock用法的经典实例

 一、Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程...
  • willhuo
  • willhuo
  • 2015年12月11日 09:18
  • 507
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解c#多线程中的lock关键字
举报原因:
原因补充:

(最多只允许输入30个字)