可以使用
有关代码示例,请参见
使用 Mutex
线程调用 mutex 的
线程通过调用其
由于 Mutex 类从
如果某个线程拥有 Mutex,则该线程就可以在重复的等待-请求调用中指定同一个 Mutex,而不必阻止其执行;但是,它必须释放 Mutex,次数与释放所属权的次数相同。
被放弃的 mutex
如果线程终止而未释放 Mutex,则认为该 mutex 已放弃。这是严重的编程错误,因为该 mutex 正在保护的资源可能会处于不一致的状态。在 .NET Framework 2.0 版中,获取该 mutex 的下一个线程中将引发
注意 |
---|
在 .NET Framework 1.0 和 1.1 版中,放弃的 Mutex 被设置为已发送信号状态,下一个等待线程将获得所有权。如果没有等待线程,则 Mutex 保持已发送信号状态。不引发异常。 |
本地 mutex 和系统 mutex
Mutex 分两种类型:本地 mutex 和命名系统 mutex。如果使用接受名称的构造函数创建了 Mutex 对象,那么该对象将与具有该名称的操作系统对象相关联。命名的系统 mutex 在整个操作系统中都可见,并且可用于同步进程活动。您可以创建多个 Mutex 对象来表示同一命名系统 mutex,而且您可以使用
本地 mutex 仅存在于进程当中。进程中引用本地 Mutex 对象的任意线程都可以使用本地 mutex。每个 Mutex 对象都是一个单独的本地 mutex。
系统 mutex 的访问控制安全性
.NET Framework 2.0 版提供查询和设置命名的系统对象的 Windows 访问控制安全性的能力。建议从创建那一刻起就开始保护系统 mutex,因为系统对象是全局对象,因此可能被您自己的代码以外的代码锁定。
有关 mutex 的访问控制安全性的信息,请参见
评论