#include #include #include #include #include time_t timer1,timer2; struct tm *tarray1,*tarray2; sem_t sema,sema1; int BLCK_SIZE; int memparse (); int memload (); int memparse() { int d; int i; i = memload (); d = i * 65536; return d; } int memload() { int memory; scanf("%d", &memory); return memory; } void* tf(void* p) { int j = 80; while(j--) { int i = 0; for(;itm_min; sec1 = tarray1->tm_sec; sem_init(&sema,0,0); sem_init(&sema1,0,0); int mb; printf ("Test Brzine Procesora - 64-bit - Verzija 1.0.0 - [ES]\n"); printf ("\n"); printf("Unesite koliko memorije alocirate za test (64 do 512 MB):"); BLCK_SIZE = memparse (); mb = 0.000015259 * BLCK_SIZE; int* mem = calloc(4,BLCK_SIZE*sizeof(int)); if (mb < 64) { printf("\n"); printf("Postavljena vrednost nije dozvoljena. Minimum je 64.\n"); printf("\n"); return 0; } if (mb > 512) { printf("\n"); printf("Postavljena vrednost nije dozvoljena. Maksimum je 512.\n"); printf("\n"); return 0; } if(!mem) { printf("Nema dovoljno memorije.\n"); return 0; } else printf("Program je alocirao %d MB RAM-a.\n", mb); pthread_t tid[4]; pthread_create(tid+0,0,tf,mem+0*BLCK_SIZE); pthread_create(tid+1,0,tf,mem+1*BLCK_SIZE); pthread_create(tid+2,0,tf,mem+2*BLCK_SIZE); pthread_create(tid+3,0,tf,mem+3*BLCK_SIZE); sem_wait(&sema); sem_wait(&sema); sem_wait(&sema); sem_wait(&sema); printf ("25 procenata komletirano... \n"); sem_post(&sema1); sem_post(&sema1); sem_post(&sema1); sem_post(&sema1); sem_wait(&sema); sem_wait(&sema); sem_wait(&sema); sem_wait(&sema); printf ("50 procenata komletirano... \n"); sem_post(&sema1); sem_post(&sema1); sem_post(&sema1); sem_post(&sema1); sem_wait(&sema); sem_wait(&sema); sem_wait(&sema); sem_wait(&sema); printf ("75 procenata komletirano... \n"); sem_post(&sema1); sem_post(&sema1); sem_post(&sema1); sem_post(&sema1); sem_wait(&sema); sem_wait(&sema); sem_wait(&sema); sem_wait(&sema); printf ("100 procenata komletirano! \n"); sem_post(&sema1); sem_post(&sema1); sem_post(&sema1); sem_post(&sema1); pthread_join(tid[0],NULL); pthread_join(tid[1],NULL); pthread_join(tid[2],NULL); pthread_join(tid[3],NULL); timer2 = time(NULL); tarray2 = localtime(&timer2); min2 = tarray2->tm_min; sec2 = tarray2->tm_sec; if (min2 < min1) { minf = min2 + 60 - min1; } else minf = min2 - min1; if (sec2 < sec1) { secf = sec2 + 60 - sec1; minf -= 1; } else secf = sec2 - sec1; printf ("\n"); printf ("Vreme izvrsavanja je %d minuta i %d sekundi.\n",minf,secf); printf ("\n"); free(mem); sem_destroy(&sema); sem_destroy(&sema1); return 0; }