命名空间System.Threading命名空间的同步锁 Monitor类

时间:2023-03-08 19:38:42
命名空间System.Threading命名空间的同步锁 Monitor类

官方备注:

Monitor类通过向单个线程授予对象所来控制对对象的访问。对象所提供限制访问代码块的能力。当一个线程拥有对象的锁时,其他任何线程都不能获取该锁。还可以使用Monitor来确保不会允许其他任何线程访问正在由锁的所有者执行的应用程序代码,除非另一个线程正在使用其他的锁定对象执行改代码。

Monitor类调用Enter或TryEnter方法获取对象锁,使用Exit放弃对象锁,在Enter/TryEnter和Exit之间可调用Pause/PauseAll或Wait方法,Wait方法的调用会放弃对象锁并堵塞当前线程,当其他线程调用Pause/PauseAll方法通知其他线程对象锁(必须是针对相同的对象的锁)的状态发生变更,其他因调用Wait方法而放弃锁并堵塞线程的线程将重新获取之前放弃的锁,从而使线程继续直到Exit方法彻底放弃锁。

当一个线程调用Wait导致暂时释放锁并堵塞线程后,如果没有其他线程调用Pause通知堵塞的线程可以重新获取锁,那么调用Wait的线程会一直处于堵塞状态,除非其他线程调用Pause/PauseAll方法。

MethodImplAttribute特性修饰某方法时,在构造方法中传入MethodImplOptions.Synchronized参数可使被修饰的方法只能在单线程中被调用,如果被修饰的方法是静态方法则锁住的是对象的类型,如果是实例方法,则锁住的是方法的对象的实例。

//2015-03-29