أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

وصف حالات السباق والمأزق

هام: تمت ترجمة هذه المقالة باستخدام برامج مايكروسوفت للترجمة الآلية ومن المحتمل ان يتم تحريرها او تدقيقها بعد ذلك من خلال تكنولوجيا منصة مجموعات الترجمة(CTF) او من خلال مترجم بشري. تقدم لك شركة مايكروسوفت هذه المقالات المترجمة بشكل آلي او بالترجمة البشرية او بعد تحريرها وتدقيقها من قبل مجموعات الترجمة حتى تمكنكم من الوصول إلى جميع المقالات الموجودة في قواعد المعرفة لديها بلغات مختلفة. إلا أن المقالات المترجمة قد تحتوي على أخطاء في المفردات او بناء الجمل او النحو. وعليه، فإن شركة مايكروسوفت ليست مسؤولة عن اية أخطاء او عدم دقة في الترجمة او أية أضرار قد تحدث نتيجة أخطاء في ترجمة محتويات النص او استخدامه من قبل العملاء.

اضغط هنا لرابط المقالة باللغة الانجليزية317723
الموجز
.NET في Visual Basic أو Visual Basic 2005 يوفر القدرة على استخدام مؤشرات الترابط في تطبيقات Visual Basic لأول مرة. تقديم مؤشرات ترابط قضايا التصحيح مثل deadlocks وحاﻻت السباق. يتناول هذا المقال هاتين المسألتين.
معلومات أخرى

حالات السباق

تكون حالة سباق عند مؤشرات الترابط بين الوصول إلى متغير مشترك في نفس الوقت. مؤشر الترابط الأول بقراءة المتغير وقراءة مؤشر ترابط آخر بنفس القيمة من المتغير. ثم تنفيذ مؤشر الترابط الأول والثاني من مؤشر ترابط العمليات الخاصة بها على القيمة، وسباق لرؤية أي مؤشر ترابط يمكن كتابة القيمة الأخيرة إلى متغير مشترك. قيمة مؤشر الترابط الذي يكتب قيمته آخر يتم الاحتفاظ، لأن مؤشر الترابط بكتابة قيمة كتب الموضوع السابق.

تفاصيل والمثال

يتم تخصيص كل مؤشر ترابط فترة زمنية لتنفيذ على معالج معرف مسبقاً. عند انتهاء الوقت الذي يخصص لمؤشر الترابط، يتم حفظ سياق مؤشر الترابط حتى دورة التالية في المعالج، ويبدأ المعالج في تنفيذ مؤشر الترابط التالي.

كيف يمكن أن أمر سطر واحد تتسبب حالة سباق؟ فحص المثال التالي لمعرفة كيفية حدوث حالة تعارض. هناك مؤشرات الترابط بين، وكلاهما يتم تحديث متغير مشترك يسمى الإجمالي (الذي يتم تمثيله ك dword ptr ds: [031B49DCh] في التعليمات البرمجية التجميع).

التعليمات البرمجية ل Visual Basic:
   'Thread 1   Total = Total + val1				
   'Thread 2   Total = Total - val2				
رمز التجميع (مع أرقام الأسطر) من التحويل البرمجي للتعليمات البرمجية ل Visual Basic السابقة:
 'Thread 1 1.   mov         eax,dword ptr ds:[031B49DCh]  2.   add         eax,edi  3.   jno         00000033  4.   xor         ecx,ecx  5.   call        7611097F  6.   mov         dword ptr ds:[031B49DCh],eax 				
 'Thread 2 1.   mov         eax,dword ptr ds:[031B49DCh]  2.   sub         eax,edi  3.   jno         00000033  4.   xor         ecx,ecx  5.   call        76110BE7  6.   mov         dword ptr ds:[031B49DCh],eax 				
بالنظر إلى التعليمات البرمجية التجميع، يمكنك أن ترى كم عدد عمليات أداء المعالج على المستوى الأدنى لتنفيذ عملية حسابية بسيطة إضافة. مؤشر ترابط قد يكون قادراً على تنفيذ كل أو جزء من التعليمات البرمجية الخاصة به الجمعية خلال وقت المعالج. الآن انظر كيفية حدوث حالة تعارض من هذا القانون.

كان إجمالي 100 و val1 هو 50 val2 هو 15. يحصل على فرصة لتنفيذ مؤشر ترابط 1 لكن فقط إكمال الخطوات من 1 إلى 3. وهذا يعني أن مؤشر ترابط 1 قراءة المتغير وإتمام الإضافة. قيد الانتظار مؤشر ترابط 1 فقط كتابة قيمة جديدة 150. بعد إيقاف مؤشر الترابط 1، مؤشر ترابط 2 يحصل على التنفيذ الكامل. وهذا يعني أنه قد مكتوب القيمة التي حسبت (85) الخارج لمجموعة المتغير. وأخيراً، مؤشر ترابط 1 تستعيد عنصر التحكم وانتهاء التنفيذ. كان يكتب ما قيمته (150). لذلك، عند الانتهاء من مؤشر ترابط 1 قيمة إجمالي الآن 150 بدلاً من 85.

يمكنك أن ترى كيف يمكن أن يكون هذا مشكلة رئيسية. إذا كان برنامج البنك، لدى العميل الأموال في الحساب التي يجب أن لا تكون موجودة.

هذا الخطأ العشوائي، لأنه يمكن لمؤشر ترابط 1 لإكمال التنفيذ الخاص به قبل وقتها على انتهاء المعالج، ثم يمكنك البدء 2 مؤشر ترابط التنفيذ الخاص به. في حالة حدوث هذه الأحداث، لا تحدث المشكلة. تنفيذ مؤشر الترابط غير الحتمية، ولذلك يتعذر التحكم بالوقت أو أمر التنفيذ. لاحظ أيضا تنفيذ مؤشرات الترابط قد يختلف في وقت التشغيل مقابل وضع التصحيح. أيضا، يمكنك أن ترى أنه في حالة تنفيذ كل مؤشر ترابط في سلسلة، لا يحدث الخطأ. يجعل هذا العشوائية هذه الأخطاء أكثر صعوبة لتتبع وتصحيح.

لمنع حدوث حالات السباق، يمكنك تأمين متغيرات مشتركة، حيث أن الوصول إلى المتغير المشترك بمؤشر ترابط واحد فقط في مرة الواحدة. ذلك قلة، لأنه إذا تم تأمين متغير في مؤشر ترابط 1 ويحتاج مؤشر ترابط 2 أيضا المتغير، يتوقف التنفيذ 2 مؤشر ترابط أثناء انتظار مؤشر ترابط 2 1 مؤشر الترابط لتحرير المتغير. (لمزيد من المعلومات، راجع "SyncLock" في قسم "المراجع" من هذه المقالة).

الأعراض

الأعراض الأكثر شيوعاً لحالة السباق هو قيم المتغيرات التي يتم مشاركتها بين عدة مؤشرات ترابط غير متوقعة. ينتج هذا عن عدم إمكانية التنبؤ بأمر فيه تنفيذ مؤشرات الترابط. Wins مؤشر ترابط واحد في وقت ما، وفي وقت ما wins مؤشر ترابط آخر. وفي أحيان أخرى، التنفيذ يعمل بشكل صحيح. أيضا، إذا تم تنفيذ كل مؤشر ترابط بشكل منفصل، قيمة المتغير يعمل بشكل صحيح.

حالات التوقف التام

حالة توقف تام عند مؤشرات الترابط بين كل تأمين متغير مختلف في نفس الوقت ومحاولة تأمين المتغير مؤشر الترابط مؤمنة بالفعل. وكنتيجة لذلك، يتوقف تنفيذ كل مؤشر ترابط وينتظر مؤشر ترابط آخر لتحرير المتغير. لأن كل مؤشر ترابط تحتضن المتغير الذي أراد مؤشر الترابط، لا شيء يحدث، وتظل مؤشرات الترابط المتوقف.

تفاصيل والمثال

التعليمات البرمجية التالية على كائنين ليفتفال ورايتفال:
'Thread 1SyncLock LeftVal SyncLock RightVal  'Perform operations on LeftVal and RightVal that require read and write. End SyncLockEnd SyncLock				
'Thread 2SyncLock RightVal SyncLock LeftVal  'Perform operations on RightVal and LeftVal that require read and write. End SyncLockEnd SyncLock				
حالة توقف تام عندما يسمح لتأمين ليفتفال 1 مؤشر الترابط. إيقاف تنفيذ 1 مؤشر ترابط المعالج ويبدأ تنفيذ مؤشر ترابط 2. نظم التأمين 2 رايتفال ثم يحاول تأمين ليفتفال. لأنه تم تأمين ليفتفال، يتوقف مؤشر ترابط 2 وينتظر ليفتفال ليتم إصدارها. لأنه تم إيقاف مؤشر الترابط 2، الصفحات 1 يسمح لمتابعة تنفيذ. مؤشر الترابط 1 يحاول تأمين رايتفال لكن لا يمكن لمؤشر ترابط 2 تم تأمينه. نتيجة لذلك، يبدأ مؤشر الترابط 1 إلى الانتظار حتى تصبح متوفرة رايتفال. كل مؤشر ترابط ينتظر مؤشر ترابط آخر، لأن كل مؤشر ترابط بتأمين المتغير في انتظار مؤشر الترابط، ويتم فتح أي مؤشر ترابط المتغير الذي يتم الضغط.

لم تحدث حالة توقف تام دائماً. إذا كان تنفيذ مؤشر ترابط 1 كلا التأمين قبل إيقاف المعالج، مؤشر ترابط 1 إجراء عملياته وثم إلغاء تأمين المتغير المشترك. بعد إلغاء مؤشر الترابط 1 تأمين المتغير، مؤشر ترابط 2 متابعة التنفيذ الخاص به كما هو متوقع.

هذا الخطأ يبدو واضحا عندما توضع هذه أجزاء تعليمات برمجية جنبا إلى جنب، ولكن في الممارسة العملية، قد تظهر التعليمة البرمجية في الوحدات النمطية المستقلة أو مناطق التعليمات البرمجية الخاصة بك. هذا خطأ فادح جداً لتعقب سبب من هذه التعليمات البرمجية نفسها، كل من التنفيذ الصحيح والتنفيذ غير صحيح يمكن أن يحدث.

الأعراض

أحد أعراض شائعة لحالة توقف تام أن توقف البرنامج أو مجموعة من المواضيع عن الاستجابة. هذا يعرف أيضا تعليق. عمليات جزئية على الأقل انتظار كل متغير تأمين الصفحات الأخرى. مؤشرات الترابط لا تقم بالمتابعة، لأن تصدر أي مؤشر ترابط متغير به حين الحصول متغير آخر. أن تعليق البرنامج بأكمله في حالة انتظار البرنامج على أحد أو كلا هذه المواضيع على التنفيذ الكامل.

ما هو مؤشر ترابط؟

يتم استخدام العمليات لفصل التطبيقات المختلفة التي تنفذ في وقت محدد على جهاز كمبيوتر واحد. لا يتم تنفيذ العمليات على نظام التشغيل، ولكن القيام بمؤشرات الترابط. مؤشر ترابط وحدة التنفيذ. يخصص نظام التشغيل وقت المعالج لمؤشر ترابط لتنفيذ مهام لمؤشر الترابط. عملية مفردة يمكن أن تحتوي على مؤشرات ترابط متعددة للتنفيذ. يحتفظ كل مؤشر ترابط معالجات الاستثناء الخاص به، جدولة أولويات، ومجموعة من الهياكل التي يستخدمها نظام التشغيل لحفظ سياق مؤشر الترابط في حالة مؤشر الترابط لا يمكن إتمام التنفيذ الخاص به أثناء الوقت الذي تم تعيينه إلى المعالج. السياق يعقد حتى أن يتلقى مؤشر ترابط وقت المعالج في المرة التالية. السياق يتضمن كافة المعلومات أن مؤشر الترابط يتطلب مواصلة تنفيذه بسلاسة. تتضمن هذه المعلومات مجموعة مؤشر الترابط من تسجيلات المعالج ومكدس الاستدعاءات داخل مساحة عنوان العملية المضيفة.
مراجع
لمزيد من المعلومات، ابحث تعليمات Visual Studio للكلمات الأساسية التالية:
  • SyncLock. يسمح كائن يمكن تأمينها. إذا كان مؤشر ترابط آخر يحاول تأمين نفسه، يتم حظر إلى أول مؤشر الترابط. استخدم SyncLock بعناية، لأنه يمكن أن تنتج المشاكل من إساءة استخدام SyncLock. على سبيل المثال، يمكن منع حالات السباق هذا الأمر بل تتسبب حالات التوقف التام.
  • متداخلة. يتيح تحديد مجموعة من عمليات الأمن على المتغيرات الرقمية الأساسية.
للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
316422 معلومات: التخطيط لمؤشر الترابط في Visual Basic.NET
لمزيد من المعلومات، راجع موقع MSDN على ويب:

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 317723 - آخر مراجعة: 10/28/2013 23:30:00 - المراجعة: 3.0

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbvs2005swept kbvs2005applies kbinfo kbmt KB317723 KbMtar
تعليقات
/html>body>0].appendChild(m); =">