المواضيع
في الحوسبة ، تعد خيوط POSIX ، المعروفة باسم pthreads ، نموذج تنفيذ موجود بشكل مستقل عن لغة البرمجة ، بالإضافة إلى نموذج تنفيذ متوازي . وهي تسمح للبرنامج بالتحكم في تدفقات عمل متعددة مختلفة تتداخل في الوقت. يشار إلى كل تدفق عمل باسم خيط ، ويتم إنشاء هذه التدفقات والتحكم فيها من خلال إجراء مكالمات إلى واجهة برمجة تطبيقات خيوط POSIX . خيوط POSIX هي واجهة برمجة تطبيقات محددة بواسطة معيار معهد مهندسي الكهرباء والإلكترونيات (IEEE) POSIX .1c، ملحقات الخيوط (IEEE Std 1003.1c-1995) .
تتوفر تنفيذات واجهة برمجة التطبيقات على العديد من أنظمة التشغيل المتوافقة مع POSIX الشبيهة بـ Unix مثل FreeBSD و NetBSD و OpenBSD و Linux و macOS و Android [1] و Solaris و Redox و AUTOSAR Adaptive، والتي يتم تجميعها عادةً كمكتبة libpthread . توجد أيضًا تنفيذات DR-DOS و Microsoft Windows : داخل نظام فرعي SFU/SUA الذي يوفر تنفيذًا أصليًا لعدد من واجهات برمجة تطبيقات POSIX، وأيضًا داخل حزم الجهات الخارجية مثل pthreads-w32 ، [2] التي تنفذ pthreads أعلى واجهة برمجة تطبيقات Windows الموجودة .
محتويات
يحدد pthreads مجموعة من أنواع لغة البرمجة C والوظائف والثوابت. يتم تنفيذه باستخدام رأس ومكتبة خيوط .
pthread.h
هناك حوالي 100 إجراء خيطي، كلها ذات بادئة pthread_ويمكن تصنيفها إلى خمس مجموعات:
- إدارة المواضيع – إنشاء المواضيع والانضمام إليها وما إلى ذلك.
- المتزامنات
- متغيرات الحالة
- المزامنة بين الخيوط باستخدام أقفال القراءة والكتابة والحواجز
- أقفال الدوران [3]
تعمل واجهة برمجة تطبيقات إشارات المرور POSIX مع خيوط POSIX ولكنها ليست جزءًا من معيار الخيوط، حيث تم تعريفها في معيار POSIX.1b، ملحقات الوقت الفعلي (IEEE Std 1003.1b-1993) . وبالتالي، يتم وضع بادئة إجراءات إشارات المرور sem_بدلاً من pthread_.
مثال
مثال يوضح استخدام pthreads في C:
#تضمين <stdio.h> #تضمين <stdlib.h> #تضمين <assert.h> #تضمين <pthread.h> #تضمين <unistd.h>
#تعريف NUM_THREADS 5
void * perform_work ( void * arguments ) { int index = * (( int * ) arguments ); int sleep_time = 1 + rand () % NUM_THREADS ; printf ( "الخيط %d: بدأ. \n " , index ); printf ( "الخيط %d: سيظل في وضع السكون لمدة %d ثانية. \n " , index , sleep_time ); sleep ( sleep_time ); printf ( "الخيط %d: انتهى. \n " , index ); return NULL ; }
int main ( void ) { pthread_t threads [ NUM_THREADS ]; int thread_args [ NUM_THREADS ]; int i ; int result_code ; //إنشاء جميع الخيوط واحدة تلو الأخرى for ( i = 0 ; i < NUM_THREADS ; i ++ ) { printf ( "في main: إنشاء الخيط %d. \n " , i ); thread_args [ i ] = i ; result_code = pthread_create ( & threads [ i ], NULL , perform_work , & thread_args [ i ]); assert ( ! result_code ); }
printf ( "في main: تم إنشاء كافة الخيوط. \n " );
//انتظر حتى اكتمال كل خيط
for ( i = 0 ; i < NUM_THREADS ; i ++ ) { result_code = pthread_join ( threads [ i ], NULL ); assert ( ! result_code ); printf ( "في main: انتهى الخيط %d. \n " , i ); }
printf ( "انتهى البرنامج الرئيسي. \n " );
return 0 ; }
يقوم هذا البرنامج بإنشاء خمسة خيوط، كل منها ينفذ الدالة perform_work التي تطبع الرقم الفريد لهذا الخيط في الإخراج القياسي. إذا أراد المبرمج أن تتواصل الخيوط مع بعضها البعض، فسيتطلب هذا تعريف متغير خارج نطاق أي من الوظائف، مما يجعله متغيرًا عالميًا . يمكن تجميع هذا البرنامج باستخدام مُجمِّع gcc باستخدام الأمر التالي:
gcc pthreads_demo.c -pthread -o pthreads_demo
هذا هو أحد النتائج العديدة المحتملة لتشغيل هذا البرنامج.
في main: إنشاء الموضوع 0.
في main: إنشاء الموضوع 1.
في main: إنشاء الموضوع 2.
في main: إنشاء الموضوع 3.
الموضوع 0: بدأ.
في main: إنشاء الموضوع 4.
الموضوع 3: بدأ.
الموضوع 2: بدأ.
الموضوع 0: سيكون في وضع السكون لمدة 3 ثوانٍ.
الموضوع 1: بدأ.
الموضوع 1: سيكون في وضع السكون لمدة 5 ثوانٍ.
الموضوع 2: سيكون في وضع السكون لمدة 4 ثوانٍ.
الموضوع 4: بدأ.
الموضوع 4: سيكون في وضع السكون لمدة ثانية واحدة.
في main: تم إنشاء جميع المواضيع.
الموضوع 3: سيكون في وضع السكون لمدة 4 ثوانٍ.
الموضوع 4: انتهى.
الموضوع 0: انتهى.
في main: انتهى الموضوع 0.
الموضوع 2: انتهى. الموضوع 3: انتهى. الموضوع 1: انتهى . في main: انتهى الموضوع 1. في main: انتهى الموضوع 2. في main: انتهى الموضوع 3. في main: انتهى الموضوع 4. انتهى البرنامج الرئيسي.
خيوط POSIX لنظام Windows
لا يدعم Windows معيار pthreads بشكل أصلي، لذلك يسعى مشروع Pthreads4w إلى توفير تنفيذ غلاف محمول ومفتوح المصدر . يمكن استخدامه أيضًا لنقل برامج Unix (التي تستخدم pthreads) مع القليل من التعديل أو بدونه على منصة Windows. [4] إصدار Pthreads4w 3.0.0 [5] أو أحدث، الذي تم إصداره بموجب ترخيص Apache Public License v2.0، متوافق مع أنظمة Windows 64 بت أو 32 بت. الإصدار 2.11.0، [6] الذي تم إصداره بموجب ترخيص LGPLv3، متوافق أيضًا مع 64 بت أو 32 بت.
يحتوي مشروع Mingw-w64 أيضًا على تنفيذ غلاف لـ 'pthreads، winpthreads ، والذي يحاول استخدام المزيد من مكالمات النظام الأصلية من مشروع Pthreads4w. [7]
يوفر نظام فرعي بيئة Interix المتوفر في حزمة Windows Services for UNIX/Subsystem for UNIX-based Applications منفذًا أصليًا لواجهة برمجة تطبيقات pthreads، أي غير مُعين على واجهة برمجة تطبيقات Win32 ولكن تم بناؤه مباشرةً على واجهة استدعاء نظام التشغيل . [8]
انظر أيضا
- نظام التشغيل
- أوبن إم بي
- سيلك / سيلك بلس
- كتل بناء الخيوط (TBB)
- مكتبة مؤشرات الترابط POSIX الأصلية (NPTL)
- مواضيع DCET
- استنساخ (نداء نظام Linux)
- الاستيقاظ الكاذب
- تخزين محلي للخيوط
- خيوط GNU المحمولة
- Grand Central Dispatch (مكتبة المواضيع الخاصة بشركة Apple)
- Beginthread (برنامج فرعي داخل Windows لإنشاء خيط جديد وخيط Unix)
- خيوط الحالة ، نهج قائم على الأحداث للترابط
مراجع
- ^ "libc/bionic/pthread.c - platform/bionic - Git في Google". android.googlesource.com .
- ^ "Pthread Win-32: مستوى التوافق مع المعايير". 2006-12-22. مؤرشف من الأصل في 2010-06-11 . تم الاسترجاع في 2010-08-29 .
- ^ "pthread.h(0p) — صفحة دليل Linux" . تم الاسترجاع في 18 ديسمبر 2022 .
- ^ هارت، جونسون م. (2004-11-21). "تجارب مع مكتبة Pthreads مفتوحة المصدر وبعض التعليقات". مؤرشف من الأصل في 2010-08-30 . تم الاسترجاع في 2010-08-29 .
- ^ ملف: pthreads4w-code-v3.0.0.zip – مصدر pthreads4w v3.0.0
- ^ ملف: pthreads4w-code-v2.11.0.zip – مصدر pthreads4w v2.11.0
- ^ انظر http://locklessinc.com/articles/pthreads_on_windows وهو المكان الذي تم اشتقاقه منه في الأصل
- ^ "الفصل 1: مقدمة إلى خدمات Windows لنظام UNIX 3.5". 5 ديسمبر 2007.
قراءة إضافية
- ديفيد ر. بوتينهوف (1997). البرمجة باستخدام خيوط POSIX . أديسون ويسلي. رقم ISBN 978-0-201-63392-4.
- برادفورد نيكولز؛ ديك بوتلار؛ جاكلين برولكس فاريل (سبتمبر 1996). برمجة Pthreads . أوريلي وشركاؤه. رقم ISBN 978-1-56592-115-3.
- تشارلز جيه نورثروب (1996-01-25). البرمجة باستخدام خيوط يونكس . جون وايلي وأولاده. رقم ISBN 978-0-471-13751-1.
- كاي أ. روبينز وستيفن روبينز (2003). برمجة أنظمة يونكس . برنتيس هول. رقم ISBN 978-0-13-042411-2.
روابط خارجية
- المواصفات الأساسية للمجموعة المفتوحة، الإصدار 7، معيار IEEE 1003.1
