在应用程序中使用多个线程的一个好处是每个线程都可以异步执行。然而,线程的异步特性意味着必须协调对资源(如文件句柄、网络连接和内存)的访问。否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作。结果将产生不可预知的数据损坏。这个时候我们就需要lock上场了。
Lock的作用
Lock获取给定对象的互斥锁,保证相应的代码块运行时,不会被其他线程中断;直到该对象被释放时其他线程才能访问相应的代码块;
Lock实现本质
通过System.Threading.Monitor的enter和exit方法实现的
代码实例如下
1 public void PrintByInnerObj(object greating)
2 {
3 Console.WriteLine(greating+"-- before lock");
4 object obj = new object();
5 lock(obj)
6 {
7 Console.WriteLine(greating + "-- is locking");
8 Console.WriteLine(greating.ToString());
9 System.Threading.Thread.Sleep(10000);
10 }
11 Console.WriteLine(greating + "-- has unlock");
12 }
2 {
3 Console.WriteLine(greating+"-- before lock");
4 object obj = new object();
5 lock(obj)
6 {
7 Console.WriteLine(greating + "-- is locking");
8 Console.WriteLine(greating.ToString());
9 System.Threading.Thread.Sleep(10000);
10 }
11 Console.WriteLine(greating + "-- has unlock");
12 }