线程学习9——Mutex类
互斥:
在操作系统中,许多线程常常需要共享资源,而这些资源往往要求一次只能为一个线程服务(排他性),这种排他性地使用共享资源称为线程间的互斥。
线程互斥实质上也是同步,可以看做一种特殊的线程同步。
Mutex类:
线程的互斥常用Mutex类实现,利用它可以对资源进行独占性访问。
与Monitor类相似,只有获取Mutex对象的所属权的线程才能进入临界区,未获得Mutex对象所属权的线程只能在临界区外等待。
使用Mutex类要比使用Monitor类消耗更多的系统资源,但它可以跨越应用程序边界,在多个应用程序之间进行同步。
Mutex类的部分方法:
WaitOne():请求互斥体的所属权,只有请求道所属权后线程才能进入临界区。
ReleaseMutex():释放互斥体的所属权。
OpenExisting():打开现有的已命名互斥体。
Mutex类的使用方法:
Mutex类是非静态类,使用时必须创建一个Mutex对象。
在Mutex类的构造函数中,可以制定互斥锁定是否最初由调用线程拥有,定义互斥锁定的名称,获得互斥锁定是否已存在的信息。
bool mCreatedNew;
Mutex mutex=new Mutex(false,"ProCSharpMutex",out mCreateNew);
在上面的示例中,第三个参数定义为输出参数,接受一个表示互斥锁定是否为新创建的布尔值。如果返回的值是false,就表示互斥锁定已经定义。
互斥锁定可以在另一进程中定义,因为操作系统知道有名称的互斥锁定,它由不同的进程共享。
如果没有给互斥锁定指定名称,互斥锁定就是未命名的,不在不同的进程之间共享。