1、每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。
2、C#提供了一个关键字lock,它可以把一段代码定义为互斥段,互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。
lock(expression) statement_block。expression代表你希望跟踪的对象,通常是对象引用。如果你想要保护一个类的实例,你可以使用this。如果你希望保护一个静态变量。一般使用类名就可以了。statement_block就是互斥段的代码,这段代码在一个时刻内只可能被一个线程执行。
3、多线程公用一个对象时,System.Threading中的一个类Monitor,我们可以称之为监视器,Monitor提供了使线程共享资源的方案。
4、Monitor类可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。对象锁机制保证了在可能引起混乱的情况下一个时刻只有一个线程可以访问这个对象。
5、Monitor必须和一个具体的对象相关联,但是有于它是一个静态的类,索引不能使用它来定义对象,而且它所有的方法都是静态的,不能使用对象来引用。
6、当一个线程调用Monitor.Enter()方法锁定一个对象时,这个对象就归它所有了,其他线程想要访问这个对象,只有等待它使用Monitor.exit()方法来释放锁。
7、当拥有对象锁的线程准备释放锁时,它使用Monitor.Pulse()方法通知等待队列中的第一个线程,于是。该线程被转移到预备队列中,当对象锁被释放时,在预备队列中的线程可以立即获得对象锁。
8、Monitor.Wait()方法释放对象上的锁并阻塞当前线程,直到它重新获取该锁。