c# lock用法
来源:互联网 发布:ps4网络设置 编辑:程序博客网 时间:2024/05/22 00:37
通常,应避免锁定 public 类型,否则实例将超出代码的控制范围;
最佳做法是定义 private 对象来锁定, 或 private static 对象变量来保护所有实例所共有的数据。
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading;
namespace ZaZhi.Core.Test
{
class Account {
private object thisLock = new object();
int balance;
Random r = new Random();
public Account(int initial) {
balance = initial;
}
int Withdraw(int amount) {
if (balance < 0)
{
throw new Exception("Negative Balance");
}
lock (thisLock)
{
if (balance >= amount)
{
Console.WriteLine("Balance before Withdrawal : " + balance);
Console.WriteLine("Amount to Withdraw : -" + amount);
balance = balance - amount;
Console.WriteLine("Balance after Withdrawal : " + balance);
return amount;
}
else {
Console.WriteLine("return 0;");
return 0; }
}
}
public void DrawTransactions()
{
for (int i = 0; i < 100; i++)
{
Withdraw(r.Next(1, 100));
}
Console.WriteLine("睡一会{0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(10);
Console.WriteLine("结束{0}",Thread.CurrentThread.ManagedThreadId);
}
}
[TestClass]
public class UnitTest3
{
[TestMethod]
public void TestMethod1()
{
Thread[] threads = new Thread[10];
Account account = new Account(1000);
for (int i=0;i<10;i++)
{
Thread t = new Thread(new ThreadStart(account.DrawTransactions));
//Thread t = new Thread(account.DrawTransactions);
threads[i] = t;
}
for (int i=0;i<10;i++)
{
threads[i].Start();
}
Console.WriteLine("主线程结束");
}
}
}
- C# lock用法实例
- c# lock用法
- c# lock用法
- C#原子操作 Lock用法
- c# 中多线程同步Lock的用法
- C#多线程中lock的用法
- c#多线程中Lock()的用法
- c# 多线程中lock用法经典实例及lock("xxx"),lock(typeof(Class)),Lock(this)的区别
- Lock 用法
- lock用法
- Lock用法
- C# lock
- C# Lock
- c# lock
- C# lock
- C# Lock
- C# Lock
- 关于c#里的lock关键字的用法
- 选中select框后返回其中的值
- Ubuntu下使用Vi是方向键变乱码 退格键不能使用的解决方法
- git常用命令教程
- TensorFlow使用技巧
- swift单例模式一句话实现
- c# lock用法
- 链表模板(中间插入)
- 指针
- ExtJS学习笔记
- Android ORMLite数据库详解
- Unity3D Vector3.Dot 点乘 与 Vector3.Cross 叉乘
- Mybatis环境配置
- CODEVS 1225 八数码难题(BFS && A*)
- 28. Implement strStr()