Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Использование класса Mutex


Автор: Madstar 25.12.2009, 14:09
Доброе время суток!
Вобщем изучаню синхронизацию потоков в C#, дошел до метода Mutex()
В самоучителе есть пример:
Код

using System;
using System.Threading;

namespace MutexDemo
{
    class NumberWriter
    {
        Mutex mutex;

        public NumberWriter()
        {
            mutex = new Mutex(false, "MutexDemoAppMutex");
        }

        public void WriteThread()
        {
            mutex.WaitOne();
            for (int i = 0; i < 0; i++)
            {
                Console.Write("{0}.", i);
                Thread.Sleep(100);
            }
            mutex.Close();
        }
    }
    class MutexDemoApp
    {
        [STAThread]
        static void Main(string[] args)
        {
            NumberWriter nw = new NumberWriter();

            Thread thr1 = new Thread(new ThreadStart(nw.WriteThread));
            Thread thr2 = new Thread(new ThreadStart(nw.WriteThread));

            thr1.Start();
            thr2.Start();

            Console.ReadLine();
        }
    }
}

при работе программы выскакивает исключение: ObjectDisponsedException
подскажите что тут не так?

Автор: tol05 25.12.2009, 14:32
первый поток заходит в метод и по окончанию своей работы закрывает Mutex. Соответственно второй поток не может обращаться к закрытому Mutex-су
вместо          mutex.Close();
используйте  mutex.ReleaseMutex();

Автор: Madstar 28.12.2009, 08:17
благодарю)

Автор: jonie 28.12.2009, 08:57
насколько мне не изменяет память, именованные мьютексы это интерпроцессинговая вещь. Т.е. мало того что ваши потоки будут видеть этот мьютекс, так еще и другие приложения его видеть будут, что зачастую нежелательно....

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)