Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <pthread.h>
- #define Nmax 4
- #define Pmax 3
- // Solucion: Eliminacion de la condición de exclusion mutua.
- // Eliminando los locks, no es posible que un proceso adquiera de forma exclusiva un recurso.
- void *trabajo(void *tid){
- int thid, i, j, k, ya;
- double x=0;
- int mis_recursos[Nmax];
- thid = (int)tid;
- srand(thid);
- for(i=0;i<Nmax;i++){
- ya=0;
- while(ya==0){
- j=(int) (Nmax)*(rand()/(RAND_MAX+1.0));
- ya=1;
- for(k=0;k<i;k++){
- if (mis_recursos[k]==j){
- ya=0;
- }
- }
- }
- mis_recursos[i]=j;
- printf("Soy %d y quiero el recurso %d\n",thid,j);
- for(k=0;k<10000;k++){
- x+=sqrt(sqrt(k+0.1));
- }
- k = (int) 2*(rand()/(RAND_MAX+1.0));
- sleep(k);
- printf(" Soy %d y tengo el recurso %d\n",thid,j);
- }
- printf("**********ACABE! Soy %d\n",thid);
- }
- main(){
- int i, j;
- pthread_t th[Pmax];
- for(i=0;i<Pmax;i++){
- j = pthread_create(&th[i],NULL,trabajo,(void *)i);
- if(j){
- printf("ERROR; return code from pthread_creat() is %d\n",j);
- exit(-1);
- }
- }
- for(i=0;i<Pmax;i++){
- pthread_join(th[i],NULL);
- }
- exit(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement