C#线程锁(Lock)
Lock的作用
Lock可以看成在操作系统中的临界区,Lock区域内的代码表示临界区,使得同一时间只有一个线程能够进入Lock所包含的函数中,实现原子操作,保护同一资源只有一个线程进行修改,实现不同线程中数据的同步。
未进入Lock的线程将被阻塞等待,直到Lock锁被打开才唤醒其中一个进入,并且进行上锁
Lock的使用
private Object thisLock = new Object();//创建对象锁
lock (thisLock)
{
// Critical code section
}
Lock使用的注意事项
1、 需要注意的是首先创建的对象锁,应该是不同线程能够访问的同一个对象,因此至少应该是在类中是全局的,不应为局部变量。
2、为了实现全局的对象锁,可以使用static,例:
private static Object thisLock = new Object();//创建对象锁
3、结合自己线程的运行特性,选择正确的对象锁