بعد سنوات من ملء الاستمارات والانتظار، حصلت أخيرًا على رخصتك المصرفية. هذا يعني أنك أصبحت الآن مؤهلًا رسميًا لفتح بنكك الخاص، هنيئًا لك!
أولويتك الأولى هي تشغيل أنظمة تقنية المعلومات. وبعد يوم من العمل الشاق، أصبحت قادرًا بالفعل على فتح الحسابات وإغلاقها، وعلى التعامل مع عمليات السحب والإيداع.
ولأنك لم ترغب في تكبّد عناء كتابة الاختبارات، دعوت بعض أصدقائك لمساعدتك في اختبار النظام. لكن بعد خمس دقائق فقط، ادّعى أحد أصدقائك أنه فقد المال! ورغم ثقتك بأن الكود الخاص بك خالٍ من الأخطاء، بدأت تتصفح السجلات للتحقيق.
آه أجل، كما توقعت تمامًا، صديقك هو المخطئ! فقد شارك بيانات اعتماده للاختبار مع صديق آخر، وتآمرا معًا على تنفيذ عمليات إيداع وسحب من الحساب نفسه على التوازي. ومن قد يفعل شيئًا كهذا؟
وبينما تجادل بأنه من المستحيل فعليًا أن يصل أحدهم إلى حسابه على التوازي، يخبرك صديقك بثقة متعالية أن قواعد العمل المصرفي تقتضي أن تدعم ذلك. إذن، لا دعم للعمليات المصرفية المتوازية، ولا إشارة انطلاق. فتُنهِد وتدوّن في ذهنك أن تعمل على هذا غدًا. سيؤخر ذلك تاريخ إطلاقك يومًا آخر على الأقل، ولكن حسنًا...
مهمتك هي تنفيذ حسابات بنكية تدعم الفتح والإغلاق والسحب والإيداع.
بما أن الحسابات البنكية يمكن الوصول إليها بطرق مختلفة (الإنترنت، والهواتف المحمولة، والخصومات التلقائية)، يجب أن يسمح برنامجك البنكي بالوصول إلى الحسابات بأمان من خيوط/عمليات متعددة (تختلف المصطلحات باختلاف لغة البرمجة لديك) في الوقت نفسه. على سبيل المثال، قد تحدث عمليات إيداع وسحب كثيرة في الوقت نفسه؛ عليك أن تضمن عدم وجود حالات تسابق بين قراءة رصيد الحساب وضبط الرصيد الجديد.
يجب أن يكون من الممكن إغلاق الحساب؛ فالعمليات على حساب مُغلق يجب أن تفشل.
يقدّم هذا التمرين الخيوط لاختبار مدى متانة حسابك البنكي عند تنفيذ عمليات متزامنة. وإليك بعض المواد القرائية عن الخيوط في Tcl:
بعض توزيعات Tcl لا تتضمّن حزمة Thread افتراضيًا: قد يلزم تثبيتها بشكل منفصل.
تحقّق من ذلك باستخدام:
$ echo 'package require Thread' | tclsh
إذا لم يُنتج ذلك أي إخراج فإن حزمة Thread مثبّتة بالفعل.
نفّذ apt install tcl-thread (أو dnf install tcl-thread) حسب الحاجة.
سجّل في Exercism لتتعلّم وتتقن Tcl عبر 135 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.