C++ Concurrency in Action (البرمجة المتوازية بلغة C++ عمليًا)
C++ Concurrency in Action (البرمجة المتوازية بلغة C++ عمليًا)
ملخص:
مقدمة
كتاب «C++ Concurrency in Action» (الطبعة الثانية، 2019) لأنتوني ويليامز هو بلا شك أكثر المراجع موثوقية وعمقًا في البرمجة متعددة الخيوط والمتوازية بلغة C++. المؤلف، وهو عضو في لجنة توحيد معايير C++ ومطور مكتبة just::thread، لا يصف فقط بناء الجملة، بل يعلم التفكير بمفاهيم التزامن، وتجنب سباقات البيانات، وبناء أنظمة فعالة وآمنة وقابلة للتوسع. يغطي الكتاب الآليات الأساسية (std::thread، الميوتكس، المتغيرات الشرطية) والمواضيع المتقدمة (العمليات الذرية، هياكل lock-free، نموذج ذاكرة C++).
عن ماذا يتحدث الكتاب
تمت مراجعة طبعة 2019 بالكامل لتتوافق مع معايير C++14 و C++17. يتكون الكتاب من 13 فصلاً مقسمة إلى جزأين: الأساسيات والتقنيات المتقدمة. يقدم الجزء الأول إدارة الخيوط، وحماية البيانات المشتركة، والمزامنة، والمهام غير المتزامنة. أما الجزء الثاني فيتعمق في الأنواع الذرية، ونموذج ذاكرة C++، وتصميم حاويات lock-free، والخوارزميات المتوازية، واختبار الكود متعدد الخيوط. يحتوي كل فصل على العديد من الأمثلة العملية، من تجمع خيوط بسيط إلى تنفيذ قائمة انتظار بدون أقفال.
لمن هذا الكتاب
الكتاب موجه لـ مطوري C++ ذوي الخبرة الذين يكتبون بالفعل بثقة بلغة C++11/14/17 ويريدون إتقان تعدد الخيوط. سيكون الأمر صعبًا على المبتدئين في C++ - حيث يفترض معرفة القوالب، والمؤشرات الذكية، وتعبيرات لامدا، ومكتبة STL. ومع ذلك، إذا كان لديك بالفعل خبرة أساسية في العمل مع الخيوط بلغات أخرى (Java، C#) وتريد فهم خصوصية C++، فسيكون الكتاب جسرًا ممتازًا.
ماذا سيتعلم القارئ
- إدارة الخيوط: الإنشاء، الانضمام، الفصل، تمرير الوسائط، تعريف الخيوط.
- حماية البيانات المشتركة: std::mutex، std::lock_guard، std::unique_lock، الميوتكس التكراري والمشترك، الجمود (deadlock) وكيفية منعه.
- المزامنة: المتغيرات الشرطية (std::condition_variable)، std::future، std::promise، std::packaged_task، std::async.
- العمليات الذرية: std::atomic، نماذج الترتيب (relaxed, acquire, release, seq_cst)، حواجز الذاكرة.
- نموذج ذاكرة C++: الوصف الرسمي لـ happens-before، المزامنة، سباقات البيانات.
- برمجة Lock-free: تصميم الأكوام، وقوائم الانتظار، وجداول التجزئة بدون أقفال.
- الخوارزميات المتوازية: std::for_each، std::find، std::reduce مع سياسات التنفيذ (std::execution::par).
- الاختبار والتصحيح: البحث عن سباقات البيانات، اختبار الكود متعدد الخيوط، الأدوات (ThreadSanitizer).
نقاط القوة
الميزة الرئيسية للكتاب هي العمق والدقة. أنتوني ويليامز لا يوضح فقط كيفية استخدام واجهة البرمجة (API)، بل يشرح أيضًا لماذا يعمل الكود بهذه الطريقة، وما هي الضمانات التي يقدمها المعيار، وكيفية تجنب المخاطر. من القيم بشكل خاص الوصف التفصيلي لنموذج ذاكرة C++ - وهو موضوع يظل عادةً "صندوقًا أسود" لمعظم المطورين. أمثلة الكود واقعية، ومعلقة جيدًا، وغالبًا ما تكون مصحوبة برسوم بيانية. تتضمن الطبعة الثانية فصلاً عن الخوارزميات المتوازية في STL وأمثلة محدثة لـ C++17.
لمن يُوصى به
الكتاب ضروري للقراءة لكل من يكتب خوادم عالية التحميل، ومحركات الألعاب، والأنظمة المالية، وقواعد البيانات، أو أي برنامج آخر تكون فيه الأداء والدقة مهمين أثناء التنفيذ المتوازي. سيكون مفيدًا أيضًا لمطوري المكتبات والأطر الراغبين في إنشاء مكونات آمنة للخيوط. إذا كنت تستعد لمقابلة في شركة تستخدم C++ بنشاط (على سبيل المثال، في مجال HFT، أو تطوير الألعاب، أو برمجة الأنظمة)، فإن هذا الكتاب سيمنحك المعرفة الأساسية التي ستميزك عن المرشحين الآخرين.