Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.17 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <pthread.h>
  3. #include <cstdlib>
  4. #include <iostream>
  5. #include <signal.h>
  6. #include <ctime>
  7. #include <unistd.h> //biblioteka za sleep();
  8.  
  9. //maknul sam atomic jer iz nekog razloga nema na barki te biblioteke
  10.  
  11. using namespace std;
  12.  
  13. int N,M; //da ih mozes pozivat u funkcijama
  14. int ZajednickaVarijabla[10]; //ne treba dinamicki alocirati, a i pise da nek max bude 10
  15.  
  16. void izlaz(int sig)
  17. {
  18.         cout<<"Prekid programa!"<<endl;
  19.         exit(1);
  20.         //bez return(0); void ne vraca nist
  21. }
  22. void *Pisac(void *x) //zad 1. dr. je da generira, ispise i spremi u globalnu mem. N brojeva
  23. {
  24.         int i;
  25.         for(i=0;i<N;i++) ZajednickaVarijabla[i]=rand()%100+1; //generiramo polje rand brojeva
  26.         for(i=0;i<N;i++) cout<<i<<" -> "<<ZajednickaVarijabla[i]<<endl; //ispis
  27.         return NULL;
  28.         /*
  29.         ne treba dodatna varijabla za spremanje
  30.         u globalnu memoriju zato jer se automatski
  31.         sprema u polje
  32.         */
  33. }
  34.  
  35. void *Citac(void *x) //zad 2. dr je da procita brojeve, izracuna i ispise sumu
  36. {
  37.         int i;
  38.         int zbroj=0;
  39.         for(i=0;i<N;i++) zbroj=zbroj+ZajednickaVarijabla[i]; //cita brojeve i racuna zbroj
  40.         cout<<"Zbroj = "<<zbroj<<endl; //klasicni ispis                                                                                                                                                                                              return NULL;                                                                                                                                                                                                                         }
  41.  
  42.  
  43. int main(int argc, char **argv)//dodaj ulazne argumente!!!
  44. {
  45.         if(argc!=3) //ograniceno na 10 kaj nebi bilo nismo znali
  46.         {
  47.                 cout<<"Greska! Pogresan unos parametara."<<endl;
  48.                 return 0;
  49.         }
  50.         N=atoi(argv[1]);
  51.         M=atoi(argv[2]);
  52.         int i;
  53.         pthread_t thr_id[2];    //deklariranje 2 dretve
  54.         srand(time(0));      
  55.         for(i=0;i<M;i++)
  56.         {                                                                                                                                                                                                                                                    if(pthread_create(&thr_id[0], NULL, Pisac, NULL)!=0) {
  57.                         cout<<"Greska kod stvaranja dretve!"<<endl;
  58.                         exit(1);
  59.                 }
  60.                 sleep(1);                                                                                                                                                                                                                                    if(pthread_create(&thr_id[1], NULL, Citac, NULL)!=0) {
  61.                         cout<<"Greska pri stvaranju dretve!"<<endl;                                                                                                                                                                                                  exit(1);
  62.                 }                                                                                                                                                                                                                                            sleep(1);
  63.         }                                                                                                                                                                                                                                            sigset(SIGINT, izlaz);                                                                                                                                                                                                                       pthread_join(thr_id[0], NULL);
  64.         pthread_join(thr_id[1], NULL);
  65.         //join dretvi da se zavrse za 1. od N slucaja
  66.         izlaz(0);                                                                                                                                                                                                                                    return 0;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement