c# ما الفرق بين القفل وموتكس؟



3 Answers

lock هو كلمة أساسية مترجم ، وليس فئة أو كائن حقيقي. إنه غلاف حول وظائف فئة Monitor وهو مصمم لتسهيل عمل Monitor للحالة الشائعة.

إن Monitor (وكلمة lock ) ، كما قال دارين ، AppDomain . في المقام الأول لأنه مطلوب إشارة إلى عنوان الذاكرة (في شكل كائن تم إنشاؤه) لإدارة "قفل" والحفاظ على هوية Monitor

ومن ناحية أخرى ، فإن Mutex عبارة عن غلاف .Net حول بنية نظام التشغيل ، ويمكن استخدامه للتزامن على مستوى النظام ، باستخدام بيانات سلسلة (بدلاً من مؤشر إلى بيانات) كمعرّف له. وسيستخدم كائنان مختلفان يشيران إلى سلسلتين في عنوانين مختلفين تمامًا للذاكرة ، ولكنهما يمتلكان نفس البيانات ، نفس نظام المزامنة نفسه لنظام التشغيل.

c# multithreading synchronization

ما الفرق بين القفل وموتكس؟ لماذا لا يمكن استخدامها بالتبادل؟




أستخدم Mutex للتحقق مما إذا كان لدي بالفعل نسخة من التطبيق قيد التشغيل على نفس الجهاز.

bool firstInstance;
Mutex mutex = new Mutex(false, @"Local\DASHBOARD_MAIN_APPLICATION", out firstInstance);

if (!firstInstance)
{
    //another copy of this application running 
}
else
{
    //run main application loop here.
}
// Refer to the mutex down here so garbage collection doesn't chuck it out.
GC.KeepAlive(mutex);



لقد قيل الكثير بالفعل ، ولكن لجعل الأمر بسيط ، وهنا هو لي.

قفل -> سهل الاستخدام ، أغلفة على الشاشة ، أقفال عبر المواضيع في AppDomain.

غير مدموغة - = تشبه القفل ما عدا قفل نطاق أكثر وأكثر عبر AppDomain في عملية.

يُعد نطاق التمرير -> نطاق التأمين أكثر من كائن المزامنة غير المسمى وتحدث عبر العملية في نظام التشغيل.

حتى الآن هناك خيارات ، تحتاج إلى اختيار واحد يناسب أفضل في قضيتك.




Related