الحصول على أقفال مع قيود زمنية في 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