Boost.Thread في C++: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Boost.Thread في C++: دليل شامل مع أمثلة

1. ما هي المكتبة ولماذا تحتاجها

Boost.Thread هي مكتبة قوية وناضجة ضمن مجموعة مكتبات Boost C++ Libraries، توفر أدوات محمولة (عبر المنصات) للعمل مع تعدد الخيوط (multithreading). ظهرت هذه المكتبة قبل وقت طويل من إدخال معيار C++11 لوحدة <thread> الخاصة به، ولا تزال مطلوبة حتى اليوم بفضل مرونتها ومجموعتها الغنية من الأدوات ودعمها للمترجمات القديمة. تتيح لك المكتبة إنشاء وإدارة الخيوط، ومزامنة الوصول إلى البيانات المشتركة، واستخدام الأقفال (locks)، والمتغيرات الشرطية (condition variables)، والحواجز (barriers)، والإشارات (semaphores)، ومجموعات الخيوط (thread pools)، وغير ذلك الكثير.

لماذا تحتاج Boost.Thread إذا كانت هناك مكتبة قياسية؟ أولاً، توفر Boost.Thread أدوات إضافية غير موجودة في معيار C++ (مثل barrier، و future مع دعم when_any، و thread_group). ثانياً، لديها واجهة برمجة تطبيقات (API) أكثر ثراءً لإدارة الخيوط (مثل إمكانية تعيين حجم مكدس الخيط، وأولويته، واسمه). ثالثاً، تضمن Boost.Thread قابلية نقل الكود بين منصات مختلفة (Windows, Linux, macOS) ومترجمات مختلفة (MSVC, GCC, Clang)، وهو أمر بالغ الأهمية للمشاريع الكبيرة. أخيراً، تُستخدم Boost.Thread بنشاط في المشاريع القديمة (legacy) حيث يصعب الترحيل إلى C++11/17/20.

في موقع PythonLib التعليمي، نعتبر Boost.Thread مثالاً ممتازاً على شكل مكتبة "صناعية" لتعدد الخيوط في C++. إنها تعلمك كيفية التعامل الصحيح مع الموارد المشتركة، وتساعدك على تجنب حالات التوقف التام (deadlocks) وسباقات البيانات (race conditions)، كما تعرض أنماط تصميم تطبيقات تعدد الخيوط.

2. التثبيت

لا يتم تثبيت Boost.Thread عبر pip أو npm أو cargo - إنها مكتبة C++ يتم تثبيتها مع Boost. فيما يلي الأوامر الدقيقة لأنظمة مختلفة.

لينكس (Ubuntu/Debian)

sudo apt-get update
sudo apt-get install libboost-all-dev

ماك (Homebrew)

brew install boost

ويندوز (vcpkg)

vcpkg install boost-thread

ويندوز (تجميع يدوي)

قم بتنزيل Boost من الموقع الرسمي، قم بفك الضغط ثم نفذ:

bootstrap.bat
.\b2 --with-thread

التجميع مع CMake (مثال)

في ملف CMakeLists.txt الخاص بك:

find_package(Boost REQUIRED COMPONENTS thread)
target_link_libraries(your_target PRIVATE Boost::thread)

3. بداية سريعة - مثال عملي بسيط

قم بإنشاء ملف main.cpp:

#include <iostream>
#include <boost/thread.hpp>

void hello() {
    std::cout << "مرحباً من الخيط! معرف الخيط: "
              << boost::this_thread::get_id() << std::endl;
}

int main() {
    boost::thread t(hello);
    t.join(); // انتظار انتهاء الخيط
    std::cout << "الخيط الرئيسي انتهى." << std::endl;
    return 0;
}

قم بتجميعه وتشغيله:

g++ main.cpp -lboost_thread -lboost_chrono -pthread -o main
./main

الخرج (معرف الخيط سيكون مختلفاً):

مرحباً من الخيط! معرف الخيط: 0x7f8b9c0b9700
الخيط الرئيسي انتهى.

4. أهم الدوال/الفئات

4.1. boost::thread - إنشاء وإدارة الخيوط

التوقيع:

explicit thread(const boost::function0<void>& thread_function);
void join();
void detach();
bool joinable() const;

الوظيفة: تمثل الفئة boost::thread خيط تنفيذ منفصل. يستقبل المُنشئ (constructor) كائنًا قابلاً للاستدعاء

توصيات