עזרה דחוף למבינים ב-Threads

אוופסס

New member
עזרה דחוף למבינים ב-Threads

אני מכיר את הפקודות ליצירת תהליכונים ב- Unix, וגם סנכרון בינהם ע"י mutex. אני מנסה לעבוד ב- Linux, ושום דבר לא אותו דבר. thr_create לא עובד, אין את ספריית synch כדי להשתמש ב- mutex. מישהו יכול "לתרגם" לי מה הפקודות המקבילות ב-Linux או לתת הפניה לעזרה בנושא הזה?
 

voguemaster

New member
שתי שיטות לעבוד מקבילית בלינוקס

השיטה הראשונה היא השיטה היוניקסית המקובלת - כלומר לעבוד עם פרוססים שונים ובעזרת IPC לתקשר ביניהם (shared memory, numbered semaphores etc..) השיטה השניה היא לעבוד עם סטנדרט די חדש (חדש = כמה שנים
) שנקרא POSIX THREADS. אתה צריך אימפלמנטציה של POSIX THREADS ובלינוקס האימפלמנטציה הכי נפוצה היא LinuxThreads, שלמעשה (הפלא ופלא!) מגיעה כבר בתוך ה-glibc שלך. כלומר, ישנם THREADS בלינוקס (למרות שבאופן פנימי הספריה מנהלת אותם בתור פרוססים אבל לך זה לא משנה..). כמה דברים: קובץ ה-HEADER נקרא pthread.h בזמן קישור (כשמחברים את כל קובצי ה-O לקובץ שניתן להרצה) צריך להוסיף הפניה לספריה בצורה הבאה, ותמיד רצוי להוסיף הגדרה של REENTRANCY, לדוגמא:
gcc -g -D_REENTRANT -o <exe_file> file1.o file2.o ... -lpthread​
עוד דבר חשוב לזכור הוא להגיד לקומפיילר לעבוד עם הספריות הבטוחות לשימוש ע"י כמה THREADS (מה שנקרא MT SAFE) ע"י הוספת השורה הבאה לפני כל ה-INCLUDES שלך:
#define _REENTRANT​
ועכשיו לעניין האמיתי, הפונקציות: pthread_create - יצירת THREAD חדש (ראה MAN PAGE) pthread_mutex_lock - נעילת MUTEX. pthread_mutex_unlock - די ברור מאליו... pthread_detach - גורם לכך שלא תצטרך לחכות לבן. ועוד ועוד.. אני ממליץ בחום לבדוק את ה-MAN PAGES, ושאלות אפשר תמיד להפנות ל-comp.programming.threads (ממליץ על GOOGLE GROUPS). תהנה
 

Zack DA

New member
רגע, רגע

זה ברור שקריאות המערכת שונות בין מערכות הפעלה שונות... הרי תוכנית שתכתוב ב- SLACKWARE לא תעבוד ב- REDHAT למשל, כי קריאות המערכת שונות ולעיתים גם הסיפריות התומכות הן שונות. לפי דעתי כל שאתה צריך לעשות זה להסתכל ב- MAN PAGES, ולמצוא את הדרך החדשה למצוא את הפקודות שלפתע אבדו לך... צחי
 
למעלה