هل من الآمن تجاهل حالة سباق القراءة والكتابة المتمثلة في تغيير قيمة النقطة العائمة بسلاسة؟

StackOverflow https://stackoverflow.com/questions/2340027

  •  22-09-2019
  •  | 
  •  

سؤال

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

سؤالي هو ، بالنظر إلى أنه حتى مهمة النقطة العائمة ليست ذرية ، هل يمكن أن تؤدي حالة سباق القراءة والكتابة إلى تغيير سلكي/مفاجئ للقيم الأصلية المتغيرة بسلاسة كما يراها القارئ؟

علاوة على ذلك ، في وضعي ، يمكنني التسامح مع كمية صغيرة من الخطأ ، لأن مثل هذا الخطأ لن يتراكم خلال إطار العرض التالي.

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

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

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

القسم 12.5 من ECMA-334 (تحديد لغة C#) ينص على:

تقرأ وتكتب أنواع البيانات التالية يجب أن تكون ذرية: Bool ، Char ، Byte ، Sbyte ، Short ، Ushort ، Uint ، Int ، Float ، والمرجع.

تحقيقًا لهذه الغاية ، يجب ألا ترى أي فساد بسبب القراءة والكتابة عن تعويم (على افتراض أنك لا تعني الضعف هنا ، وهذا هو ليس مضمونة أن تكون كتابة ذرية).

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

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top