البرمجة

التحكم في الخيوط في C++ باستخدام std::mutex

في لغة C++، يمكنك وضع تعريف لمتغير std::thread في نطاق أكبر ليصبح متاحًا في جميع أنحاء الكود. يمكنك استخدام متغير من هذا النوع لإنشاء وإدارة الخيوط بطريقة تلبي احتياجاتك. النطاق الذي تم إنشاء فيه المتغير يحدد متى يمكنك الوصول إليه ومتى يتم تدميره.

للقيام بذلك في الشيفرة الخاصة بك، يمكنك تعريف المتغير خارج الحلقة while لجعله متاحًا في كل تكرار. وبمجرد أن تقرر إنشاء الخيط، يمكنك التحقق من حالة التشغيل باستخدام الشرط وتنفيذ الخطوات المناسبة.

فيما يلي تعديل على الشيفرة الخاصة بك:

cpp
#include void someFunction() {/*someTask*/} int main() { bool isFirstRun = true; std::thread t1; // تعريف المتغير الخاص بالخيط خارج الحلقة while (true) { if (!isFirstRun) { t1 = std::thread(someFunction); // إنشاء الخيط عندما isFirstRun يكون false } //some long task if (!isFirstRun) { t1.join(); // الانضمام إلى الخيط إذا كان قد تم إنشاؤه } if (isFirstRun) { isFirstRun = false; } } return 0; }

هذا التعديل يضمن أن المتغير t1 قابل للوصول في جميع أنحاء الكود ويمكن إعادة استخدامه لإنشاء وإدارة الخيوط داخل الحلقة.

المزيد من المعلومات

بالطبع، دعونا نوسع على موضوع الخيوط في C++ ونقدم مزيدًا من المعلومات حول كيفية التعامل معها وكيفية تحقيق التحكم في تنفيذ الخيوط.

في C++، تعد الخيوط (Threads) واحدة من الأدوات الرئيسية لتحقيق التنفيذ المتعدد الخيوط (Multithreading). يسمح Multithreading بتنفيذ عمليات متعددة في وقت واحد، مما يعزز كفاءة البرامج ويزيد من استفادة الأنظمة من موارد الجهاز.

لتحقيق التحكم في تنفيذ الخيوط في C++، يمكنك استخدام متغيرات الحالة والتزامن (Synchronization) بين الخيوط. على سبيل المثال، يمكنك استخدام std::mutex لتأمين مناطق الكود التي يتعين فيها تفاعل عدة خيوط.

إليك مثال على كيفية استخدام std::mutex لتحقيق تزامن بين الخيوط:

cpp
#include #include #include std::mutex threadMutex; // تعريف متغير mutex void someFunction() { //some task std::lock_guard lock(threadMutex); // قفل المتغير mutex std::cout << "Thread ID: " << std::this_thread::get_id() << " is executing someFunction()\n"; //some other task } // تلقائياً، سيتم إلغاء قفل المتغير mutex عند انتهاء نطاق lock_guard int main() { bool isFirstRun = true; std::thread t1; while (true) { if (!isFirstRun) { t1 = std::thread(someFunction); } //some long task if (!isFirstRun) { t1.join(); } if (isFirstRun) { isFirstRun = false; } } return 0; }

هذا المثال يستخدم std::mutex لتأمين إخراج الدالة someFunction() بحيث يتم تنفيذها بشكل متزامن بين الخيوط. يتم استخدام std::lock_guard لضمان فتح وإغلاق المتغير threadMutex بشكل تلقائي وآمن.

مقالات ذات صلة

زر الذهاب إلى الأعلى

المحتوى محمي من النسخ !!