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