这篇讲线程锁 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来进行处理
怎么加锁那
首先加一个 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--;
}
}
}
}
运行结果
OK 写完~