Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <pthread.h>
- #include <stdio.h>
- #include <stdlib.h>
- // tutaj dajecie dlugosc imienia
- #define SIZE 4 // dlugosc imienia
- struct Symbol
- {
- int n, k; // struktura przechowująca zmienną n oraz k
- };
- int newton(int n, int k) // funkcja obliczająca w sposób rekurencyjny dwumian newtona
- {
- if (k == 0 || k == n)
- return 1;
- if (k > 0 && k < n)
- return newton(n - 1, k - 1) + newton(n - 1, k);
- return 0;
- }
- void *funkcja1(void *args) { // // funkcja odpowiadając za relizacje funkcji newton przez wątek.
- struct Symbol *s = (struct Symbol*) args; // zrzutowanie na struct Symbol
- int wynik = newton(s->n, s->k);
- pthread_exit((void*)wynik); // zakonczenie watku
- }
- void *funkcja2(void *args) { // funkcja odpowiadajaca za wypisywanie liter swojego imienia - wykonywana przez wątek
- char *imie = (char *)args; // zrzutowanie na char
- int i = 0;
- while (1) // nieskonczona petla
- {
- printf("%c", imie[i]);
- fflush(stdout); // funkcja odpowiadajaca za wypisywanie sie liter imienia w konsoli
- if (i >= SIZE)
- i = 0;
- else
- i++;
- // usypianie co 0.3s
- usleep(1000 * 300); // funkcja usypia sie na 0,3 s
- }
- phtread_exit(NULL); // zamkniecie funkcji
- }
- int main()
- {
- int n, k;
- const char *imie = "Arek";
- printf("Podaj n: ");
- scanf("%d", &n);
- printf("Podaj k: ");
- scanf("%d", &k);
- struct Symbol *sym = (struct Symbol *)malloc(sizeof(struct Symbol));
- sym->n = n; // przypisanie wprowadzonych danych do elementow struktury
- sym->k = k;
- pthread_t thread1, thread2; // stworzenie dwoch indentyfikatorow wątków
- void *wynik;
- pthread_create(&thread1, NULL, funkcja1, (void *)sym); // fuunkcja tworząca wątek ( silnia)
- pthread_create(&thread2, NULL, funkcja2, (void *)imie);// --||-- (wypisywanie)
- // tutaj modyfikujecie ile chcecie podziwiac efekt wypisywania
- sleep(5); // celowe opoznienie aby mozna bylo zobaczyc efekt wypisywania literek imienia
- pthread_join(thread1, &wynik); // czekamy na zakonczenie watku
- pthread_cancel(thread2); // anulowanie watku 2
- printf("\nWynik: %d\n", (int)wynik); // wypisanie wyniku
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement