fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //#include <ntsid.h>
  4. #include <pthread.h>
  5. #include <unistd.h>
  6.  
  7. #define BAD_EXIT 1
  8. #define NUM_TASKS 8
  9.  
  10. char * messages[NUM_TASKS];
  11.  
  12. void * PrintHello(void * taskIdPtr) {
  13. int taskId;
  14. sleep(1);
  15. taskId = *((int *) taskIdPtr);
  16. printf("Task id = %d, message = %s\n", taskId, messages[taskId]);
  17. free(taskIdPtr);
  18. pthread_exit(NULL);
  19. }
  20. int main(int argc, char ** argv) {
  21. pthread_t threads[NUM_TASKS];
  22. int * taskIdPtr;
  23. int rc, t;
  24. messages[0] = "English: Hello World!";
  25. messages[1] = "French: Bonjour, le monde!";
  26. messages[2] = "Spanish: Hola al mundo";
  27. messages[3] = "Klingon: Nuq neH!";
  28. messages[4] = "German: Guten Tag, Welt!";
  29. messages[5] = "Russian: Zdravstvytye, mir!";
  30. messages[6] = "Japan: Sekai e konnichiwa!";
  31. messages[7] = "Latin: Orbis, te saluto!";
  32.  
  33. for(t = 0; t < NUM_TASKS; t++) {
  34. taskIdPtr = (int *) malloc(sizeof(int));
  35. *taskIdPtr = t;
  36. printf("Creating thread %d\n", t);
  37. rc = pthread_create(&threads[t], NULL, PrintHello, (void *) taskIdPtr);
  38. if(rc) {
  39. perror("Error :");
  40. exit(BAD_EXIT);
  41. }
  42. }
  43.  
  44. for(t = 0; t < NUM_TASKS; t++)
  45. {
  46. pthread_join(threads[t], NULL);
  47. }
  48. return 0;
  49. }
Success #stdin #stdout 0s 4380KB
stdin
Standard input is empty
stdout
Creating thread 0
Creating thread 1
Creating thread 2
Creating thread 3
Creating thread 4
Creating thread 5
Creating thread 6
Creating thread 7
Task id = 6, message = Japan: Sekai e konnichiwa!
Task id = 7, message = Latin: Orbis, te saluto!
Task id = 5, message = Russian: Zdravstvytye, mir!
Task id = 4, message = German: Guten Tag, Welt!
Task id = 3, message = Klingon: Nuq neH!
Task id = 2, message = Spanish: Hola al mundo
Task id = 1, message = French: Bonjour, le monde!
Task id = 0, message = English: Hello World!