Newsgroup: it.comp.www.php
Titolo: Problema classico IPC: Barbiere addormentato

Una curiosità...
Posso implementarlo in php?
Non riesco a comprendere la vera potenza di php al di fuori della
programmazione web.
grazie,
Roberto.
-- 
enter_region:
 tsl register,lock
 cmp register,#0
 jne enter_region
 ret
leave_region:
 move lock,#0
 ret

 
non ho mai frequentato classico..
non ho mai frequentato ipc..
cos'e' "barbiere addormentato"?
-- 
www.iuz-lab.info


 
Da questa risposta comprendo che non si possa implementare...
IPC Comunicazione inter processo nella programmazione dei sistemi operativi.
Il barbiere addormentato è appunto un classico degli algoritmi di questo
genere (semplificato):
Nel salone ci sono un barbiere, una sedia da barbiere e n sedie per far
sedere i clienti in attesa, se ve ne sono.
Se non ci sono clienti, il barbiere si siede nella sedia e si addormenta.
Quando arriva un cliente lo sveglia, se arrivano altri clienti mentre il
barbiere sta tagliando i capelli, si siedono (se ci sono sedie libere)
altrimenti se ne vanno.
Il problema consiste nel programmare il barbiere e i clienti in modo da
evitare corse critiche.
 
Soluzione possibile (presa da "sistemi operativi" Progetto e implementazione
di Andrew S. Tanenbawm Albert S. woodhull):
#define CHAIRS 5 /* # di sedie per i clienti in attesa */
typedef int semaphore;
semaphore customers = 0;          /* # di clienti in attesa */
semaphore barbers = 0;            /* # di barbieri in attesa dei clienti */
semaphore mutex = 1;              /* per la mutua esclusione */
int waiting = 0;
void barber(void) {
 while (TRUE) {
  down(customers);     /* si sospende se il numero dei clienti è 0 */
  down(mutex);         /* accede a 'waiting' */
  waiting = waiting - 1; /* decrementa il numero di clienti in attesa */       
                up(barbers);           /* un barbiere è pronto a tagliare */
                up(mutex);             /* rilascia 'waiting' */
                cut_hair();            /* taglia i capelli (fuori dalla
sezione critica) */
}
}
void customers(void)
{
 down(mutex);                /* entra in sezione critica */
 if (waiting < CHAIRS) {     /* se non ci sono sedie libere esci */
 waiting = waiting + 1;      /* incrementa il numero di clienti in attesa */
 up(customers);              /* sveglia il barbiere se necessario */
 up(mutex);                  /* rilascia l'accesso a 'waiting' */
        down(barbers);              /* si sospende se non ci sono barbieri
liberi */
 get_haircut();              /* si siede e viene servito */
} else {
 up(mutex);                  /* Il salone è pieno, esci */
}
}
Non mi andava di mettermi ad implementarne una mia specie a quest'ora del
mattino ;)
roberto.


 IPC Comunicazione inter processo nella programmazione dei sistemi operativi.
Rispondo "da ignorante" con un semplice link (perchè qualsiasi cosa io
possa dire in merito sarebbe assoultamente una castroneria visto che non
so nulla in merito!):
http://www.php.net/manual/en/ref.sem.php
Spero possa servire!
Ciao!
--ev

ev wrote:

Ottimo, era quello che cercavo, quindi un ultima domanda mi si impone nella
mia mente contorta:
Il php può interagire con tutti i linguaggi di programmazione?
Posso far interagire l'assembler con il php come si fa tra assembler e C?
(mescolando il codice....)
ciao,


 (mescolando il codice....)
No, perche` C e assembly vengono compilati/assemblati in codice macchina,
e da li` eseguiti, mentre PHP viene interpretato al volo.
Pero` puoi scrivere librerie di funzioni in C e assembly e caricarle in
PHP. Oppure puoi scrivere programmi in C/asm, compilarli e richiamarli da
PHP. Oppure con gli stessi programmi puoi usare IPC per comunicare.
Bye.

 Bye.
bye.
