recitation 1 multitasking kai mast
play

Recitation 1: Multitasking Kai Mast Threads vs. Processes Threads - PowerPoint PPT Presentation

Recitation 1: Multitasking Kai Mast Threads vs. Processes Threads Processes How to start? pthread_create() fork() (+ exec() ) Own Address Space? No Yes Can share memory? Yes No Can execute Yes Yes concurrently? (and other


  1. Recitation 1: Multitasking Kai Mast

  2. Threads vs. Processes Threads Processes How to start? pthread_create() fork() (+ exec() ) Own Address Space? No Yes Can share memory? Yes No Can execute Yes Yes concurrently? (and other differences not relevant for the following...)

  3. A primer on concurrency Two possible outputs: bash:~ > ./a.out int main() { I’m the child int i = fork(); I’m the parent if(i == 0) printf(“I’m the child! \n”) else Or printf(“I’m the parent! \n”); bash:~ > ./a.out return 0; I’m the parent } I’m the child Why?

  4. A primer on concurrency Only one possible output: int main() { printf(“one \n”); bash:~ > ./a.out int i = fork(); one if(i == 0) two printf(“two \n”) return 0; Why? }

  5. A visualization of concurrency Parent one Child fork() two Arrow implies “happens before”

  6. Question 2a) Multiprocessing.

  7. What the Fork? int result = 0; fork() duplicates the calling process int main() { int i; for (i = 0; i < 2; i ++){ fork(); result++; printf(“result = %d\n”, result); } printf(“result = %d\n”, result); return 0; }

  8. Step 1 P1 P2 fork() 1 1 Note: This is only one possible schedule

  9. Step 2 P3 P1 P2 P4 fork() 1 1 f o r k ( ) 2 f o r k ( ) 2 2 2 Note: This is only one possible schedule

  10. Step 3 P3 P1 P2 P4 fork() 1 1 f o r k ( ) 2 f o r k ( ) 2 2 2 2 2 2 2 Note: This is only one possible schedule

  11. Question 2b) Multithreading.

  12. Do not feel threatened by threads result is a global variable int result = 0; pthread_t tid[2]; Each child-thread will execute this function void *inc_result(void *ignore) { result++; printf(“result = %d\n”, result); fflush(stdout); return NULL; Creates a new thread } in the same process int main() { for (int i = 0; i < 2; i ++){ pthread create(&tid[i], NULL, &inc_result, NULL); result++; printf(’result = %d\n’, result); } printf(“result = %d\n”, result); return 0; }

  13. Step 1 T1 T2 pthread_create() 1 2 Note: This is only one possible schedule

  14. Step 2 T3 T1 T2 pthread_create() 1 2 p t h r e a d _ 3 c r e a t e ( ) 4 4 Note: This is only one possible schedule

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend