fork(1) download
  1. #include <stdio.h>
  2. #include <pthread.h>
  3. #include <semaphore.h>
  4.  
  5. sem_t odd_sem, even_sem;
  6. int limit;
  7.  
  8. void* print_odd(void* arg)
  9. {
  10. for(int i = 1; i <= limit; i += 2)
  11. {
  12. sem_wait(&odd_sem);
  13. printf("%d ", i);
  14. sem_post(&even_sem);
  15. }
  16. return NULL;
  17. }
  18.  
  19. void* print_even(void* arg)
  20. {
  21. for(int i = 2; i <= limit; i += 2)
  22. {
  23. sem_wait(&even_sem);
  24. printf("%d ", i);
  25. sem_post(&odd_sem);
  26. }
  27. return NULL;
  28. }
  29.  
  30. int main()
  31. {
  32. pthread_t t1, t2;
  33.  
  34. printf("Enter limit: ");
  35. scanf("%d", &limit);
  36.  
  37. sem_init(&odd_sem, 0, 1);
  38. sem_init(&even_sem, 0, 0);
  39.  
  40. pthread_create(&t1, NULL, print_odd, NULL);
  41. pthread_create(&t2, NULL, print_even, NULL);
  42.  
  43. pthread_join(t1, NULL);
  44. pthread_join(t2, NULL);
  45.  
  46. sem_destroy(&odd_sem);
  47. sem_destroy(&even_sem);
  48.  
  49. return 0;
  50. }
Success #stdin #stdout 0.01s 5316KB
stdin
14
stdout
Enter limit: 1 2 3 4 5 6 7 8 9 10 11 12 13 14