Download presentation
Presentation is loading. Please wait.
Published byManuel Battin Modified over 9 years ago
1
Processes and threads
2
תהליכים ותתי תהליכים תהליכים –כל תוכנית שרצה היא תהליך (process) –ניתן להתפצל מתהליך אחד למספר תהליכים, בעזרת הפקודה fork(). הרבה יותר יעיל מבחינת זיכרון מהרצת אותה תוכנית מספר פעמים. –לתהליכים אין זיכרון משותף. תתי תהליכים (threads): –ניתן לפתוח תתי תהליכים מתוך תהליך בעזרת ספריית pthread.h –עשרות פונקציות לתיאום וסינכרון בין תתי תהליכים. –לתתי תהליכים יש גישה לזיכרון משותף : כולם מעדכנים משתנים משותפים.
3
שכפול תהליך בעזרת fork #include int main() { int i, j=0, pid; pid = fork(); printf("pid is: %d\n", getpid()); j++; if (pid==0) printf("child: %d\n", j); else printf("parent: %d\n",j); }
4
output pid is: 20453 child: 1 pid is: 20452 parent: 1
5
יצירת תתי תהליכים #include int g; void *threadFunc(void *arg){/* The thread function. Like main(), but for a thread */ char *str; str=(char*) arg; for (int i = 0; i < 6; i++) printf("%s (g = %d)\n",str, g++); return NULL; } void main(void) { pthread_t pth; pthread_create(&pth,NULL,threadFunc,“I’m a thread..."); for (int i = 0; i < 10 ; ++I;}printf("main() is running...(g = %d)\n", g++); } NULL = default attributes for thread Thread identifier Thread function Argument to function
6
output I'm a thread... (g = 0) I'm a thread... (g = 1) main() is running...(g = 2) I'm a thread... (g = 3) I'm a thread... (g = 4) I'm a thread... (g = 5) main() is running...(g = 6) I'm a thread... (g = 7) main() is running...(g = 8) main() is running...(g = 9) main() is running...(g = 10) main() is running...(g = 11)
7
#include int g = 0; void *threadFunc(void *arg){/* The thread function. Like main(), but for a thread */ char *str; str=(char*) arg; for (int i = 0; i < 6; i++) printf("%s (g = %d)\n",str, g++); return NULL; } void main(void) { pthread_t pth;// the thread identifier pthread_create(&pth,NULL,threadFunc,“I’m a thread..."); pthread_join(pth, NULL); /* wait for our thread to finish before continuing */ for (int i = 0; i < 10 ; ++I;}printf("main() is running...(g = %d)\n", g++); יצירת תתי תהליכים - סנכרון
8
output I'm a thread... (g = 0) I'm a thread... (g = 1) I'm a thread... (g = 2) I'm a thread... (g = 3) I'm a thread... (g = 4) I'm a thread... (g = 5) main() is running...(g = 6) main() is running...(g = 7) main() is running...(g = 8) main() is running...(g = 9) main() is running...(g = 10) main() is running...(g = 11)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.