C#多线程中通过lock实现线程同步

  1. 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();

原文链接:http://www.cnblogs.com/promise-7/articles/2354077.html

猜你喜欢

转载自blog.csdn.net/feiyang5260/article/details/78408801