Commit cf603352 authored by Martin's avatar Martin
Browse files

initial commit

parents
#include <stdio.h>
#include <pthread.h>
#define N_VISITANTES 1000000
int visitantes = 0;
void *molinete(void *arg)
{
int i;
for (i=0;i<N_VISITANTES;i++)
visitantes++;
}
int main()
{
pthread_t m1, m2;
pthread_create(&m1, NULL, molinete, NULL);
pthread_create(&m2, NULL, molinete, NULL);
pthread_join(m1, NULL);
pthread_join(m2, NULL);
printf("Hoy hubo %d visitantes!\n", visitantes);
return 0;
}
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#define N_FILOSOFOS 5
#define ESPERA 5000000
pthread_mutex_t tenedor[N_FILOSOFOS];
void pensar(int i)
{
printf("Filosofo %d pensando...\n",i);
usleep(random() % ESPERA);
}
void comer(int i)
{
printf("Filosofo %d comiendo...\n",i);
usleep(random() % ESPERA);
}
void tomar_tenedores(int i)
{
pthread_mutex_lock(&tenedor[i]); /* Toma el tenedor a su derecha */
pthread_mutex_lock(&tenedor[(i+1)%N_FILOSOFOS]); /* Toma el tenedor a su izquierda */
}
void dejar_tenedores(int i)
{
pthread_mutex_unlock(&tenedor[i]); /* Deja el tenedor de su derecha */
pthread_mutex_unlock(&tenedor[(i+1)%N_FILOSOFOS]); /* Deja el tenedor de su izquierda */
}
void *filosofo(void *arg)
{
int i = (int)arg;
for (;;)
{
tomar_tenedores(i);
comer(i);
dejar_tenedores(i);
pensar(i);
}
}
int main()
{
int i;
pthread_t filo[N_FILOSOFOS];
for (i=0;i<N_FILOSOFOS;i++)
pthread_mutex_init(&tenedor[i], NULL);
for (i=0;i<N_FILOSOFOS;i++)
pthread_create(&filo[i], NULL, filosofo, (void *)i);
pthread_join(filo[0], NULL);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <semaphore.h>
sem_t tabaco, papel, fosforos, otra_vez;
void agente()
{
for (;;) {
int caso = random() % 3;
sem_wait(&otra_vez);
switch (caso) {
case 0:
sem_post(&tabaco);
sem_post(&papel);
break;
case 1:
sem_post(&fosforos);
sem_post(&tabaco);
break;
case 2:
sem_post(&papel);
sem_post(&fosforos);
break;
}
}
}
void fumar(int fumador)
{
printf("Fumador %d: Puf! Puf! Puf!\n", fumador);
sleep(1);
}
void *fumador1(void *arg)
{
for (;;) {
sem_wait(&tabaco);
sem_wait(&papel);
fumar(1);
sem_post(&otra_vez);
}
}
void *fumador2(void *arg)
{
for (;;) {
sem_wait(&fosforos);
sem_wait(&tabaco);
fumar(2);
sem_post(&otra_vez);
}
}
void *fumador3(void *arg)
{
for (;;) {
sem_wait(&papel);
sem_wait(&fosforos);
fumar(3);
sem_post(&otra_vez);
}
}
int main()
{
pthread_t s1, s2, s3;
sem_init(&tabaco, 0, 0);
sem_init(&papel, 0, 0);
sem_init(&fosforos, 0, 0);
sem_init(&otra_vez, 0, 1);
pthread_create(&s1, NULL, fumador1, NULL);
pthread_create(&s2, NULL, fumador2, NULL);
pthread_create(&s3, NULL, fumador3, NULL);
agente();
return 0;
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment