Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C by vbbv ( 13 years ago )
#include <stdio.h>
#include <pthread.h>

#define VECES 1000

int nivelLago = 0;
pthread_mutex_t lago = PTHREAD_MUTEX_INITIALIZER;

void *HebraRio(void* args) {
 int i;
 int miId = *(int *)args;
 
 for (i = 0; i < VECES; i++) {
  pthread_mutex_lock(&lago;);
  // SECCION CRÍTICA
  nivelLago++;
  printf("[INC %d] Nivel del lago: %d\n", miId, nivelLago);
  pthread_mutex_unlock(&lago;);
 }

 pthread_exit(NULL);
}

void *HebraPresa(void* args) {
 int i = 0;
 int miId = *(int *)args;
 
 while (i < VECES) {
  pthread_mutex_lock(&lago;);  
  // SECCION CRÍTICA
  if (nivelLago > 0) {
   nivelLago--;
   i++;
   printf("[DEC %d] Nivel del lago: %d\n", miId, nivelLago);
  } else {
   printf("La presa %d no ha podido decrementar el nivel del lago\n", miId);
  }
  pthread_mutex_unlock(&lago;);
 }

 pthread_exit(NULL);
}

int main() {
 pthread_t rios[2], presas[2];
    pthread_attr_t attr;
 int i, ids[2];
  
    pthread_attr_init(&attr;);

 for (i = 0; i < 2; i++) {
  ids[i]=i;
  pthread_create(&rios;[i],&attr;,HebraRio,&ids;[i]);
  pthread_create(&presas;[i],&attr;,HebraPresa, &ids;[i]);
 }
 
 for (i = 0; i < 2; i++) {
  pthread_join(rios[i],NULL);
  pthread_join(presas[i],NULL);
 }

 printf("El nivel final del lago es %d\n", nivelLago);
}

 

Revise this Paste

Your Name: Code Language: