NET多线程同步方法详解(四):系统内核对象 互斥对象(Mutex)
来源:互联网 发布:微赞源码下载 编辑:程序博客网 时间:2024/06/10 07:15
互斥对象的作用有点类似于监视器对象,确保一个代码块在同一时刻只有一个线程在执行。互斥对象和监视器对象的主要区别就是,互斥对象一般用于跨进程间的线程同步,而监视器对象则用于进程内的线程同步。互斥对象有两种:一种是命名互斥;另一种是匿名互斥。在跨进程中使用到的就是命名互斥,一个已命名的互斥就是一个系统级的互斥,它可以被其他进程所使用,只要在创建互斥时指定打开互斥的名称就可以。在.Net中互斥是通过Mutex类来实现。
其实对于OpenExisting函数有两个重载版本,
Mutex.OpenExisting (String)
Mutex.OpenExisting (String, MutexRights)
对于默认的第一个函数其实是实现了第二个函数 MutexRights.Synchronize|MutexRights.Modify操作。
由于监视器的设计是基于.Net框架,而Mutex类是系统内核对象封装了win32的一个内核结构来实现互斥,并且互斥操作需要请求中断来完成,因此在进行进程内线程同步的时候性能上要比互斥要好。
典型的使用Mutex同步需要完成三个步骤的操作:1.打开或者创建一个Mutex实例;2.调用WaitOne()来请求互斥对象;3.最后调用ReleaseMutex来释放互斥对象。
static public void AddString(string str)
{
// 设置超时时限并在wait前退出非默认托管上下文
if (_mtx.WaitOne(1000, true))
{
_resource.Add(str);
_mtx.ReleaseMutex();
}
}
{
// 设置超时时限并在wait前退出非默认托管上下文
if (_mtx.WaitOne(1000, true))
{
_resource.Add(str);
_mtx.ReleaseMutex();
}
}
需要注意的是,WaitOne和ReleaseMutex必须成对出现,否则会导致进程死锁的发生,这时系统(.Net2.0)框架会抛出AbandonedMutexException异常。
- .NET多线程同步方法详解(四):系统内核对象 互斥对象(Mutex)
- NET多线程同步方法详解(四):系统内核对象 互斥对象(Mutex)
- 多线程同步之Mutex(互斥对象)
- 多线程同步-互斥对象(深入理解Mutex)
- C++多线程同步(采用互斥对象Mutex)
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- 多线程编程(10) - 多线程同步之 Mutex (互斥对象)
- C#线程同步系列(四) 互斥对象Mutex
- 多线程编程(11) - 多线程同步之 Mutex (互斥对象)[续]
- 多线程编程(11) - 多线程同步之 Mutex (互斥对象)[续]
- 互斥对象 Mutex
- 互斥对象mutex
- -【内核对象线程同步】互斥对象内核对象
- 多线程同步方法:临界区、事件、信号量、互斥对象
- VC线程同步(互斥对象Mutex)及资源共享....
- 互斥对象是一个分成简单的多线程同步的内核对象。
- C++ 事件对象 多线程同步互斥
- 量变ing
- 对比mysql oracle db2 的部分ddl语法
- NET多线程同步方法详解(二):互斥锁(lock) 收藏
- NET多线程同步方法详解(三):读写锁(ReadWriteLock) 收藏
- 百度是怎么了
- NET多线程同步方法详解(四):系统内核对象 互斥对象(Mutex)
- about csdn
- NET多线程同步方法详解(五):信号量(Semaphore)
- NET多线程同步方法详解(六):事件(ManualResetEvent/AutoResetEvent)
- OpenXcap安装(二)
- NET多线程同步方法详解(七):线程池(Thread Pooling)
- 关于symbian的清除栈
- 解决DotProject 甘特图中文乱码
- 关于rich:fileUpload学习心得