关于Mutex的构造函数参数设置
来源:互联网 发布:java list集合去重 编辑:程序博客网 时间:2024/05/18 02:31
Mutex的英文解释就是互斥体,也就是线程或者进程在同时访问一个资源的时候,是需要排他访问,也就是说一个时间段内只能有一个线程对象访问公共资源。
Mutex的构造函数分为Mutex(),Mutex(Boolean),Mutex(boolean, string)。
下面就较这3个构造函数分别进行比较分析。
1、 Mutex()这样一个构造函数相当于执行了Mutex(false),这样一个构造函数,MSDN上说,这样构造的对象,其所属的线程并不拥有互斥体。我觉得应该是线程不拥有互斥体的所有权才对。
2、 Mutex(Boolean)在CSDN上说的就是如果是true则表示拥有互斥体的所有权,false表示不拥有互斥体的所有权。
3、 Mutex(boolean, string)表示构造一个指定name的互斥体,boolean表示是否有该互斥体的所有权。应为Mutex是一个系统全局对象,因此,就算每次去new一个Mutex,如果name一样,那么也就只是构造了一个Mutex对象。Boolean参数表示了线程是否拥有该对象的初始所有权,如果是true的话,那么应该由该线程第一个创建该互斥体,整个系统中不应该有第二个线程去创建它。否则会报出“由于出现被放弃的 mutex,等待过程结束。”的错误。
例子:
public classThreadMutex
{
public void Test()
{
Threadt1 = new Thread(Thread1);
Threadt2 = new Thread(Thread2);
t1.Start();
t2.Start();
}
public void Thread1()
{
Mutexm = new Mutex(true,"test");
boolb2 = m.WaitOne();
Console.WriteLine("Thread1 get the mutex : " + b2);
Thread.Sleep(5000);
m.ReleaseMutex();
}
public void Thread2()
{
Mutexm = new Mutex(true,"test");
boolb2 = m.WaitOne();
Console.WriteLine("Thread2 get the mutex : " + b2);
Thread.Sleep(1000);
m.ReleaseMutex();
}
}
所以,在MSDN上说,“由于没有机制来确定是否创建了已命名的系统互斥体,因此,当调用此构造函数重载时,最好将 initiallyOwned 指定为 false。”
所以,最好是在构建Mutex对象的时候,使用new Mutex(false, “xxx”)来构建一个Mutex对象。
- 关于Mutex的构造函数参数设置
- 复主键使用NEW构造函数的双参数设置
- 关于构造函数的默认构造
- 关于高并发服务器的listen函数参数设置
- 关于高并发服务器的listen函数参数设置
- main函数的参数设置
- 关于C++的构造函数
- 关于构造函数的执行
- 关于构造函数的总结
- 关于java的构造函数
- 关于构造函数的理解
- 关于构造函数的初始化
- 关于类的构造函数
- 关于 mutex 的调试实例
- 关于mutex的一些理解
- 关于mutex的一些思考
- 关于类的拷贝构造函数、赋值构造函数探究
- 关于对构造函数和拷贝构造函数的理解
- OpenCV学习笔记[4]模板匹配
- 极大提高Web开发效率的8个工具和建议(含教程)
- 基于管道化和事件驱动模型的Web请求处理(二)
- RAII 想到AutoLock,Mutex类和C++11中的unique_lock
- struts2验证码代码
- 关于Mutex的构造函数参数设置
- org.hibernate.DuplicateMappingException: duplicate import:
- 基于S3C2440的嵌入式Linux驱动——SPI子系统解读(一)
- 基于S3C2440的嵌入式Linux驱动——MMC/SD子系统解读(一)
- 基于S3C2440的嵌入式Linux驱动——SPI子系统解读(二)
- 27种迹象显示你应该辞掉程序员的工作
- Apache + Tomcat集群配置详解
- 基于S3C2440的嵌入式Linux驱动——MMC/SD子系统解读(二)
- 浅谈 qmake 之 shadow build