Lock定义
lock关键字用来确保代码块运行完成,而不会被其他线程中断。它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻只允许一个线程进入执行,而其他线程必须等待。这是通过在代码运行期间为给定对象获取互斥锁来实现的。在多线程中,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这样可能导致几个线程同时执行一个函数,导致数据混乱,产生不可预料的结果,因此应该避免这种情况发生。
执行过程如下
private static object obj = new object();
lock(obj)
{
//锁定运行的代码段
}
线程A进入lock语句,判断obj是否已申请了互斥锁,如果不存在,则申请一个新的互斥锁,这时线程A进入lock里面了。此时线程B后来的话,会等待A完成。
obj代表你希望跟踪的对象,通常是对象引用,推荐使用私有的只读静态对象,比如:
private static readonly object obj = new object();