"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تنفيذ قفل بموعد نهائي في Golang؟

كيفية تنفيذ قفل بموعد نهائي في Golang؟

تم النشر بتاريخ 2024-11-09
تصفح:204

How to Implement a Lock with a Deadline in Golang?

الحصول على أقفال مع قيود زمنية في Golang

عند العمل مع الأقفال في Golang، هناك مواقف قد تحتاج فيها إما إلى الحصول على قفل على الفور أو مراعاة شكل من أشكال الموعد النهائي. في حين أن sync.Mutex الخاص بالمكتبة القياسية يوفر فقط وظائف Lock() وUnlock()، إلا أن هناك تقنية تسمح لك بمحاكاة قفل بموعد نهائي.

تنفيذ قفل بموعد نهائي

لإنشاء قفل بموعد نهائي، يمكنك استخدام قناة بحجم مخزن مؤقت واحد:

l := make(chan struct{}, 1)

للقفل، أرسل قيمة بنية إلى القناة:

l 

لفتح القفل، استقبل من القناة:

 

إجراء محاولة القفل

لمحاولة محاولة القفل، استخدم عبارة التحديد:

select { الحالة ل select { case l سيحصل هذا الرمز على القفل فورًا إذا كان متاحًا. إذا كان القفل معلقًا بالفعل، فسيتم حظر عبارة التحديد حتى يتم تحرير القفل.

حاول القفل مع انتهاء المهلة

لتحديد مهلة لمحاولة القفل، أضف قناة time.After() إلى عبارة التحديد:

select { الحالة ل

select {
case l  

الاستنتاج

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

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3