这篇讲线程锁 lock得概念

什么是锁 为什么用锁  

做个栗子

俩个线程同时访问一个int对象

一个线程 ++ 一个线程-- 都1W次

那么这个数 不管怎么样 最后都是0

class TaskDom
{
int count = 0;

public void Start()
{
Task t1= Task.Run(Task01);
Task t2=Task.Run(Task02);
t1.Wait();
t2.Wait();
Console.WriteLine("count: "+count);
}

private void Task02()
{
for (int i = 0; i < 10000; i++)
{

count++;


}
}

private void Task01()
{
for (int i = 0; i < 10000; i++)
{

count--;


}
}
}

但是结果是 而且每一次都不一样  这时候就需要锁LOCK来进行处理

C# 线程浅谈(三)_加锁

怎么加锁那

首先加一个  object obj = new object();对象

然后在需要加锁得地方加上

lock (obj)
{
//do
};

栗子

class TaskDom
{
int count = 0;
object obj = new object();
public void Start()
{
Task t1= Task.Run(Task01);
Task t2=Task.Run(Task02);
t1.Wait();
t2.Wait();
Console.WriteLine("count: "+count);
}

private void Task02()
{
for (int i = 0; i < 10000; i++)
{
lock (obj)
{
count++;
}

}
}

private void Task01()
{
for (int i = 0; i < 10000; i++)
{
lock (obj)
{
count--;
}

}
}
}

运行结果

C# 线程浅谈(三)_lock_02

OK 写完~