سؤال

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

أي شخص يمكن أن تشير لي إلى الوثائق على هذا في C/C++ for Unix ؟ نموذج التعليمات البرمجية لاستخدام هذا الهيكل سيكون رائعا.

شكرا

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

المحلول

وهذا يبدو وكأنه كنت أفضل حالا باستخدام flock(2):

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);

نصائح أخرى

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

على وجه التحديد ، تحقق:

للحصول على مزيد من المواد التفسيرية ، انظر البرمجة المتقدمة في بيئة يونيكس ، القسم 14.3

ونلقي نظرة على شبكة UNIX المجلد البرمجة. 2 التي كتبها جورج ريتشارد ستيفنز.

وبل هو أفضل الكتب التي كتبت عن هذا الموضوع.

هل يمكن استخدام كائنات المزامنة PTHREAD. في حين initilazing كائن مزامنة تحتاج إلى استخدام pthread_mutexattr_setpshared وظيفة لجعل مزامنة مشترك عبر العمليات ومن ثم وضع هذه داخل الذاكرة المشتركة. جميع العمليات يمكن أن نعلق على الذاكرة المشتركة ومن ثم الوصول إلى مزامنة.

وأيضا يمكنك إضافة سمات إضافية إلى SHM استنادا إلى متطلبات تأمين الخاص بك (العودية، الخ.،)

وماذا عن استخدام UNIX IPC لإنشاء قائمة انتظار المشتركة. عملية واحدة يقرأ قائمة الانتظار ويكتب إلى ملف، كافة العمليات الأخرى دفع البيانات في قائمة الانتظار.

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