نحن نعتبر عمليتين، تسمى "المنتج" و"المستهلك"، على التوالي. المنتج عبارة عن عملية دورية وفي كل مرة تمر بدورتها تنتج جزءًا معينًا من المعلومات، والتي يجب معالجتها من قبل المستهلك. المستهلك هو أيضًا عملية دورية، وفي كل مرة يمر فيها، يمكنه معالجة الجزء التالي من المعلومات، كما تم إنتاجها من قبل المنتج. مثال بسيط يتم تقديمه من خلال عملية حسابية، والتي تنتج على شكل "أجزاء من المعلومات" صورًا لبطاقات مثقوبة يتم تثقيبها بواسطة بطاقة مثقوبة، والتي تلعب دور المستهلك.[1]
يقوم المنتج بإنشاء العناصر وتخزينها في بنية بيانات، بينما يقوم المستهلك بإزالة العناصر من تلك البنية ومعالجتها.
إذا كان الاستهلاك أكبر من الإنتاج، فسيتم إفراغ المخزن المؤقت (بنية البيانات)، وليس لدى المستهلك ما يستهلكه
إذا كان الاستهلاك أقل من الإنتاج، فإن المخزن المؤقت يمتلئ، ولا يمكن للمنتج إضافة المزيد من العناصر. هذه مشكلة كلاسيكية تسمى المخزن المؤقت المحدود.
لنفترض أن لدينا منتجًا ينشر بريدًا إلكترونيًا في المخزن المؤقت، ومستهلكًا يستهلك البريد الإلكتروني من المخزن المؤقت ويعرض رسالة تفيد بأنه تم إرسال بريد إلكتروني باستخدام كلمة المرور الجديدة للوصول إلى البريد الإلكتروني المقدم.
]package main import ( "fmt" "os" "strconv" "sync" "time" ) type buffer struct { items []string mu sync.Mutex } func (buff *buffer) add(item string) { buff.mu.Lock() defer buff.mu.Unlock() if len(buff.items)شرح التنفيذ
رابط الكود: https://github.com/jcelsocosta/race_condition/blob/main/producerconsumer/buffer/producerconsumer.go
https://www.cin.ufpe.br/~cagf/if677/2015-2/slides/08_Concorrencia (خورخي).pdf
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3