Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.28 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <pthread.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. // tutaj dajecie dlugosc imienia
  7. #define SIZE 4 // dlugosc imienia
  8.  
  9. struct Symbol
  10. {
  11.     int n, k; // struktura przechowująca zmienną n oraz k
  12. };
  13.  
  14. int newton(int n, int k) // funkcja obliczająca w sposób rekurencyjny dwumian newtona
  15. {
  16.     if (k == 0 || k == n)
  17.         return 1;
  18.  
  19.     if (k > 0 && k < n)
  20.         return newton(n - 1, k - 1) + newton(n - 1, k);
  21.  
  22.     return 0;
  23. }
  24.  
  25. void *funkcja1(void *args) {   // // funkcja odpowiadając za relizacje funkcji newton przez wątek.
  26.     struct Symbol *s = (struct Symbol*) args; // zrzutowanie na struct Symbol
  27.     int wynik = newton(s->n, s->k);
  28.     pthread_exit((void*)wynik); // zakonczenie watku
  29. }
  30.  
  31. void *funkcja2(void *args) { // funkcja odpowiadajaca za wypisywanie liter swojego imienia - wykonywana przez wątek
  32.     char *imie = (char *)args; //  zrzutowanie na char
  33.     int i = 0;
  34.     while (1) // nieskonczona petla
  35.     {
  36.         printf("%c", imie[i]);
  37.         fflush(stdout); // funkcja odpowiadajaca za wypisywanie sie liter imienia w konsoli
  38.  
  39.         if (i >= SIZE)
  40.             i = 0;
  41.         else
  42.             i++;
  43.  
  44.         // usypianie co 0.3s
  45.         usleep(1000 * 300);  // funkcja usypia sie na 0,3 s
  46.     }
  47.     phtread_exit(NULL); // zamkniecie funkcji
  48. }
  49.  
  50. int main()
  51. {
  52.     int n, k;
  53.     const char *imie = "Arek";
  54.     printf("Podaj n: ");
  55.     scanf("%d", &n);
  56.     printf("Podaj k: ");
  57.     scanf("%d", &k);
  58.  
  59.     struct Symbol *sym = (struct Symbol *)malloc(sizeof(struct Symbol));
  60.     sym->n = n; // przypisanie wprowadzonych danych do elementow struktury
  61.     sym->k = k;
  62.  
  63.     pthread_t thread1, thread2; // stworzenie dwoch indentyfikatorow wątków
  64.     void *wynik;
  65.    
  66.     pthread_create(&thread1, NULL, funkcja1, (void *)sym); // fuunkcja tworząca wątek ( silnia)
  67.     pthread_create(&thread2, NULL, funkcja2, (void *)imie);// --||-- (wypisywanie)
  68.  
  69.     // tutaj modyfikujecie ile chcecie podziwiac efekt wypisywania
  70.     sleep(5); // celowe opoznienie aby mozna bylo zobaczyc efekt wypisywania literek imienia
  71.  
  72.     pthread_join(thread1, &wynik); //  czekamy na zakonczenie watku
  73.     pthread_cancel(thread2); // anulowanie watku 2
  74.  
  75.     printf("\nWynik: %d\n", (int)wynik); // wypisanie wyniku
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement