آشنایی با Mutex در .NET

Mutex

Mutex به معنای انحصار متقابل است. یک کلاس در framework.NET است و  همان فرایند هم زمان سازی thread ها است. mutex از اجرای هم زمان یک منبع توسط چند thread به طور هم زمان جلوگیری میکند و فقط به یک thread خاص اجازه انجام یک عمل مشخص را میدهد , در کارهای تک فرایندی و جند فرایندی به کار میرود. همچنین میتواند برای همزمان سازی درون فرایندی استفاده شود.

Mutex

Monitor/lock مانع از به اشتراک گداشتن منابع حاصل از thread های داخلی میشود اما Mutex به خوبی مانع از به اشتراک گذاشتن منابع داخلی حاصل از thread و همچنین منابع خارجی حاصل از thread ها میشود.

به عبارت دیگر ما میتوانی بگیم Mutex , thread های ایمنی برای internal/external thread مهیا میکند.

مثال:

در این مثال چندین thread در حال نوشته شدن بر روی فایل هستند.

ما چندین thread هم زمان داریم که از Mutex استفاده میکنند ودر یک زمان فقط یک thread به منابع اشتراک گذاشته شده (در مثال زیر file ) دسترسی دارد.

using System;  
using System.Threading;  
using System.IO;  

class ConsoleApplication1   
{  
static void Main(string[] args)   
{  
for (int i = 0; i < 5; i++)  
{  
Thread thread = new Thread(new ThreadStart(Go));  
thread.Name = String.Concat("Thread ", i);  
thread.Start();  
}  
Console.ReadLine();  
}  

static void Go()  
{  
Thread.Sleep(500);  
WriteFile();  
}  

static Mutex mutex = new Mutex();  
static void WriteFile()  
{  
mutex.WaitOne();  

String ThreadName = Thread.CurrentThread.Name;  
Console.WriteLine("{0} using resource", ThreadName);  

try   
{  
using(StreamWriter sw = new StreamWriter("C:\\abc.txt", true))   
{  
sw.WriteLine(ThreadName);  
}  
} catch (Exception ex)  
{  
Console.WriteLine(ex.Message);  
}  

Console.WriteLine("{0} releasing resource", ThreadName);  

mutex.ReleaseMutex();  
}  

Mutex

بررسی یک نمونه برنامه:

namespace ConsoleApplication1  
{  
    class SingleInstance   
    {  
        static void Main(string[] args)  
      {  
            String appGUID = ”۵ a913d2e - 1 d4b - 492 c - a408 - df315ca3de93”;  
            bool ok;  
            Mutex mutex = new System.Threading.Mutex(true, appGUID, out ok);  
  
            if (!ok)  
            {  
                Console.WriteLine("Another instance is already running.");  
            } else  
            {  
                Console.WriteLine("Single instance is running.");  
            }  
            Console.ReadLine();  
        }  
    }  
}

هنگامی که برنامه برای اولین بار اجرا میشود شما میتوانید پیام زیر را ببینید.

Mutex

هنگامی که برنامه بیش از یک بار اجرا میشود پیام زیر نمایش خواهد شد.

Mutex

توجه کنید:

نام Mutex باید یک علامت assembly منحصر به فرد باشد.

این یک اجرا کننده بازدید است بنابراین هنگامی که هماهنگ سازی در سراسر مرزهای فرایند مورد نیاز است باید استفاده شود.

موفق باشید !

  • پسورد: www.mspsoft.com
مسعود شریفی پور

از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

    آذین پاسخ

    بسیار عالی و مفید ممنون