线程学习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,就表示互斥锁定已经定义。

互斥锁定可以在另一进程中定义,因为操作系统知道有名称的互斥锁定,它由不同的进程共享。

如果没有给互斥锁定指定名称,互斥锁定就是未命名的,不在不同的进程之间共享。

posted @ 2011-06-03 15:05  佳园  阅读(691)  评论(0编辑  收藏  举报