关于Mutex的构造函数参数设置

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 class ThreadMutex

    {

        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对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值