Beruflich Dokumente
Kultur Dokumente
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#define TRUE 1
#define FALSE 0
//Prototipo de funciones
int waiting=0;
//Main function
pthread_t barb_t,cust_t[CANT_CUST];
int i;
pthread_create(&barb_t,NULL,barber,NULL);
for (i=0;i<CANT_CUST;i++){
sleep(T_CUST);
pthread_create(&cust_t[i],NULL,customer,NULL);
}
pthread_join(barb_t,NULL);
return(0);
down (&sem_mutex);
waiting++;
up (&sem_customer);
up (&sem_mutex);
down (&sem_barber);
else {
up (&sem_mutex);
while (TRUE) {
down (&sem_customer);
down (&sem_mutex);
waiting--;
up (&sem_barber);
up (&sem_mutex);
*sem+=1;
while (*sem<=0){};
*sem-=1;
FILOSOFOS COMENSALES
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#define TRUE1
#define N5
#define LEFT(x)(((x)-1)%N)
#define RIGHT(X)(((X)+1)%N)
typedef struct
int value;
/* Lista de procesos. */
semaphore;
typedef enum
}
status;
status estado[N];
semaphore mutex,
s[N];
main ()
int i, sw = 1;
estado[i] = THINKING;
Philosopher (i);
void
Philosopher (int i)
while (TRUE)
think ();
/* Obtiene dos tenedores o se bloquea. */
TakeForks (i);
eat ();
PutForks (i);
void
TakeForks (int i)
wait (mutex);
estado[i] = HUNGRY;
test (i);
signal (mutex);
wait (s[i]);
void
PutForks (int i)
wait (mutex);
estado[i] = THINKING;
signal (mutex);
void
test (int i)
estado[i] = EATING;
signal (s[i]);
LECTORES Y ESCRITORES
#include <stdlib.h>
#include <stdio.h>
#include <semaphore.h>
#include <pthread.h>
#include <math.h>
#include <sys/sem.h>
#include <time.h>
#define TRUE 1
main(){
void Lector ()
while (TRUE)
wait(lectores);
wait (mutex_r);
nr++;
if(nr==1)
wait(escritores);
signal(mutex_r);
signal(lectores);
wait (mutex_r);
nr;
if (nr == 0)
signal (escritores);
signal (mutex_r);
void Escritor ()
while (TRUE)
wait (mutex_w);
nw++;
if(nw==1)
wait(lectores);
signal(mutex_w);
wait(escritores);
signal (escritores);
wait(mutex_w);
nw;
if(nw==0)
signal(lectores);
signal(mutex_w)