نمط القفل المؤقت في Go
في Go، تسمح القناة المخزنة مؤقتًا بمواصلة الاتصال دون حظر حتى يمتلئ المخزن المؤقت الخاص بها. ومع ذلك، هل هناك نمط مماثل للتخزين المؤقت للأقفال التي تحد من الوصول إلى الموارد لعدد محدد من العملاء؟
إن الإجراء الأساسي لإدارة الوصول المتزامن إلى المورد هو الإشارة . يمكن تنفيذ الإشارة بسهولة باستخدام قناة مخزنة.
إليك مثال:
var semaphore = make(chan struct{}, 4) // allow four concurrent users func f() { // Grab the lock. Blocks if 4 other concurrent invocations of f are running. semaphoreفي هذا المثال، يتم إنشاء إشارة بمخزن مؤقت بحجم 4 باستخدام الإشارة := make(chan struct{}, 4). تحاول الدالة f() الحصول على القفل عن طريق إرسال بنية فارغة إلى القناة. إذا كان المخزن المؤقت للقناة ممتلئًا (على سبيل المثال، هناك 4 مثيلات متزامنة لـ f() قيد التشغيل بالفعل)، فسيتم حظر استدعاء الإشارة
عندما تنتهي الوظيفة من عملها المهمة، فإنه يقوم بتحرير القفل عن طريق استرداد بنية فارغة من القناة (-
يوفر هذا النمط طريقة ملائمة لتقييد الوصول إلى مورد مشترك لعدد محدد من العملاء المتزامنين، مما يمنع مشكلات التنافس المحتملة على الموارد.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3