. أحد المقاربات الشائعة هو استخدام قناة لإكمال الإشارة. ومع ذلك ، يمكن أن تؤدي هذه الطريقة إلى ذعر "الكتابة إلى قناة مغلقة" إذا لم ينتهي goroutines بالترتيب المتوقع. حل أفضل ينطوي على استخدام السياقات. توفر السياقات آلية للتواصل والإلغاء بين goroutines. إليك كيفية تنفيذ هذا في GO:
حزمة الرئيسية يستورد ( "سياق" "المزامنة" ) Func Main () { // إنشاء سياق ودالة لإلغاءه CTX ، إلغاء: = context.withcancel (context.background ()) // تهيئة مجموعة انتظار لتتبع إكمال Goroutine wg: = sync.waitgroup {} wg.add (3) // إضافة 3 goroutines إلى مجموعة الانتظار // إطلاق ثلاثة goroutines // يستمع كل goroutine للسياق الذي يتعين القيام به اذهب func () { تأجيل wg.done () ل { يختار { الحالة
في هذا المثال ، عندما يكمل Goroutine الثالث عملياته ، فإنه يلغي السياق. هذا ينشر الإلغاء إلى goroutines الأخرى ، مما تسبب في إنهاءها أيضًا. باستخدام السياقات ، نقوم بإلغاء احتمال الذعر والتأكد من أن جميع goroutines تنسيق إنهاءها بشكل فعال.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3