سؤال

لقد قمت بإنشاء قائمة انتظار متزامنة وست باستخدام SynClock على خاصية SynCrout في قائمة الانتظار عند استدعاء طرق Enqueue / Dequeue. يتم الاحتجاج بالطرق من مثيلات من فئات المنتج / المستهلك القياسية.

هل هذا الاستخدام السليم للممتلكات Syncrout؟

هل ستكون أفضل ممارسة لإنشاء كائن مشترك خاص في كل فئة وقفل على ذلك بدلا من ذلك؟

يرجى توضيح المنطق الخاص بك.

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

المحلول

نعم، هذا هو بالضبط ما SyncRoot الملكية ل. على وجه الخصوص، يعني أنه إذا تم إنشاء مجموعة "مجمع" أخرى، فمن المحتمل أن تستخدم نفس الشيء SyncRoot, ، لذلك لا يزال بإمكان الجميع مزامنة بشكل صحيح.

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

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

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