Advertisement
Rob95

Untitled

Jun 13th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. /* thread13.c */
  2. #include <stdio.h>
  3. #include <pthread. h.>
  4. #include <unistd. h.>
  5. #include <stdlib.h>
  6. #include <semaphore.h>
  7. static int werte[10];
  8. sem_t sem;
  9. static void thread1 (void *arg) {
  10. int ret, i, val;
  11. printf ("\t->Thread %ld gestartet ...\n",
  12. pthread_self ());
  13. /* Kritischer Codeabschnitt */
  14. for (i = 0; i < 10; i++)
  15. werte[i] = i;
  16. /* Kritischer Codeausschnitt Ende */
  17. /* Semaphor um 1 inkrementieren */
  18. sem_post(&sem);
  19. /* Aktuellen Wert ermitteln */
  20. sem_getvalue(&sem, &val);
  21. printf("\t->Semaphor inkrementiert (Wert: %d)\n", val);
  22. printf ("\t->Thread %ld ist fertig\n\n",pthread_self());
  23. pthread_exit ((void *) 0);
  24. }
  25. static void thread2 (void *arg) {
  26. int i;
  27. int summe = 0;
  28. /* Semaphor suspendiert, bis der Wert ungleich 0 ist */
  29. sem_wait(&sem);
  30. printf ("\t->Thread %ld gestartet ...\n",
  31. pthread_self ());
  32. for (i = 0; i < 10; i++)
  33. summe += werte[i];
  34. printf ("\t->Summe aller Zahlen beträgt: %d\n", summe);
  35. printf ("\t->Thread %ld fertig\n\n",pthread_self());
  36. pthread_exit ((void *) 0);
  37. }
  38. int main (void) {
  39. pthread_t th[2];
  40. int val;
  41. printf("->Main-Thread %ld gestartet\n", pthread_self());
  42. /* Semaphor initialisieren */
  43. sem_init(&sem, 0, 0);
  44. /* Aktuellen Wert abfragen */
  45. sem_getvalue(&sem, &val);
  46. printf("->Semaphor initialisiert (Wert: %d)\n\n", val);
  47. /* Mit Absicht anders herum */
  48. pthread_create (&th[1], NULL, thread2, NULL);
  49. pthread_create (&th[0], NULL, thread1, NULL);
  50. pthread_join (th[0], NULL);
  51. pthread_join (th[1], NULL);
  52. /* Aktuellen Wert abfragen */
  53. sem_getvalue(&sem, &val);
  54. printf("->Semaphor (Wert: %d)\n", val);
  55. /* Semphor löschen */
  56. sem_destroy(&sem);
  57. printf("->Semaphor gelöscht\n");
  58. printf("->Main-Thread %ld beendet\n", pthread_self());
  59. return EXIT_SUCCESS;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement