|
رأينا في المثال السابق كيفية إدارة حالة عداد بسيطة باستخدام العمليات الذرية. للحالات الأكثر تعقيدًا، يمكننا استخدام قفل استبعاد متبادل للوصول إلى البيانات بأمان من عدة روتينات Go. |
|
|
|
|
|
|
يحتوي |
|
|
اقفل قفل الاستبعاد المتبادل قبل الوصول إلى |
|
|
|
|
لاحظ أن القيمة الصفرية لقفل الاستبعاد المتبادل قابلة للاستخدام كما هي، فلا حاجة إلى تهيئته هنا. |
|
|
|
|
|
|
تزيد هذه الدالة عدادًا محدد الاسم داخل حلقة تكرار. |
|
|
شغّل عدة روتينات Go بالتزامن. لاحظ أنها جميعًا تصل إلى
|
|
|
|
|
|
|
انتظر انتهاء روتينات Go. |
|
|
يوضح تشغيل البرنامج أن العدادات قد حُدّثت كما هو متوقع. |
|
|
سنتعرف تاليًا على تنفيذ مهمة إدارة الحالة نفسها باستخدام روتينات Go والقنوات فقط. |
المثال التالي: روتينات Go ذات الحالة.