سؤال

الجميع:

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

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

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

المحلول

قبل أن تقرر حل ASYNC IO، لاحظ أنه في كثير من الأحيان ما تعتقد أن تكتب Async ينتهي كونه متزامنا بشكل متزامن. مهم بشكل خاص لحل التسجيل الخاص بك هو tidbit قليلة مخبأة في القرص غير المتزامن I / O يظهر بمزامنة على Windows NT و Windows 2000 و Windows XP. وبعد دفن هناك في المناقشة هي هذه الكتلة:

"على نظام التشغيل Windows NT، فإن أي عملية كتابة إلى ملف يمتد طوله سيكون متزامنا".

على الرغم من أن هذا يقول "Windows NT"، فقد كانت تجربتي هي أنها صحة لنظام التشغيل Windows 2000 و Windows XP و Server 2003 أيضا. أعتقد أنها تعني "NTFS" بدلا من "Windows NT". لم أختبرها على نظام التشغيل Vista أو Server 2008.

تستمر المقال في تقديم حلول محتملة لهذا الحد. أفترض أنهم يعملون، لكنهم لم يحاكمهم بالفعل.

الحل الأكثر موثوقية وجدت هو تفرخ موضوع يقوم بالكتابة المتزامنة. نوع من الألم في الرقبة، صحيح، ولكن فعالة.

نصائح أخرى

لست متأكدا مما تقصد به خطأ. إذا كنت تحمينا بالوصول إلى الملف باستخدام Process Mutex من المناسب، فهذا حتى مع I / O غير متزامن، فستكون لديك فقط عملية كتابة واحدة للملف في وقت معين. هذا يفترض أنك تبقي Mutex Locked حتى يكمل ASYNC I / O.

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