|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Semafori
Ciao
Devo fare questo programma sotto linux: --------------------------------------------------------- Gioco del Tris (versione peer-to-peer) Realizzazione di una versione elettronica del famoso "gioco del Tris". In questa versione due processi (ognuno dei quali funge da interfaccia con uno dei due giocatori) cooperano tra loro. Per prima cosa decidono quale dei due processi deve iniziare (il meccanismo di decisione e' lasciato alla discrezione dello studente), poi si accetta come input una mossa, la si trasmette al secondo processo, e ci si pone in attesa di una mossa da parte del secondo processo. Entrambi i processi, ogni volta che ricevono una mossa (sia dal loro giocatore che dall'altro processo) valutano se uno dei due giocatori ha vinto e lo riferiscono al loro giocatore. Il canale di comunicazione tra i due processi deve essere implementato tramite l'uso di memoria condivisa. ------------------------------------------------------------ La mia idea e' stata quella di usare 2 semafori binari (A =1 e B=0) Il giocatore1 fa la wait su A, e alla fine la signal(B). Il giocatore2 fa wait(B) e alla fine signal(A). Questo per garantire non solo la mutua esclusione, ma anche l'alternaza stretta nell'accesso alla memoria. Credo di aver fatto bene (anche perche' funziona), ma non sono convintissimo. Pareri? Grazie in anticipo a chi rispondera' |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Dovrebbe andare bene...
In questo modo quando A è in azione B è fermo e viceversa... E' come avere una coda produttore-consumatore di 1 elemento... |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Certo che se ogni volta devi sincronizzare due processi con dei semafori staremmo freschi.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2001
Città: Roma
Messaggi: 2532
|
leggendo l'ultima riga del testo dell' esercizio ti consiglio di usare una di queste, NON i semafori (come ti ha fatto notare anche mj):
-Libreria MM Shared Memory -MMap con flag per la memoria condivisa (non ricordo quale è) sono due soluzioni molto semplici, la seconda soprattutto (però la prima è + performante).. ciao |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Grazie a tutti
Il fatto e' che noi, per quanto riguarda la comunicazione tra processi, abbiamo fatto solo mem condivisa, semafori e code di msg, e tutto in maniera abbastanza semplice (per un totale di una decina di chiamate di sistema). Sinceramente le pipe non so neanche cosa siano Il testo dell'esercizio e' quello li, e non chiede in maniera specifica di usare i semafori. Pero' alla fine si tratta di garantire mutua esclusione su quell'area di memoria, e mi e' sembrato naturale usare i semafori per farlo Cmq, nell'ipotesi che si debbano usare i semafori, la soluzione che ho adottato e' corretta o si puo' fare di meglio? Vi ascolto |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
La mutex serve per gestire un solo accesso ad una sola risorsa...mentre il semaforo risorse multiple, o accessi multipli alla stessa risorsa... Ultima modifica di cionci : 04-12-2003 alle 14:47. |
|
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Ecco perchè "accessi multipli ad una risorsa" con la parola MUTualEXclusion non va molto d'accordo... Mah |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Io stavo dicendo PER COSA SI USANO i semfori e non PERCHé FUNZIONANO... Parlo di accessi multipli ad una sola risorsa in questo senso: Risorsa r; Semaforo s(N); s.wait(); r.uso(); s.signal(); All'istante /t all'interno di Risorsa::uso() ci possono essere un massimo di N processi... Che poi uso tratti la mutua esclusione alle sue risorse come gli pare è un'altro discorso... Di fatto fra la wait e la signal ci sono N processi... Se il numero di processi in esecuzione sono M...M-N processi possono essere in attesa sulla wait... |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Al di la delle disquisizioni filosofiche, non ho ben capito in che modo sia possibile usare un solo semaforo binario... In pratica entrambi i processi dovrebbero fare wait e signal sullo stesso semaforo?
A dire la verita' ci avevo provato, ma poi i 2 processi non entravano in sezione critica in alternanza stretta: il primo che entrava teneva sotto controllo la memoria fino alla sua morte (faceva la signal sul semaforo e subito dopo la wait sullo stesso: in pratica era assolutamente indipendente dall'altro e faceva un po' quello che voleva). Il secondo processo riusciva ad eccedere alla memoria solo dopo la morte del primo... E' li che mi e' venuta l'idea di usarne 2, in modo tale da impredire completamente che uno potesse andare avanti prima che l'altro avesse fatto quello che doveva: anche perche' alla fine, e' dalle scelte di scheduling che dipende chi andra' avanti: se un processo e' in grado di continuare da solo, chi mi garantisce che venga mantenuta l'alternanza stretta? |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#13 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Ho capito ma quello che ti chiedevo prima è dove distingui il termine MUTEX dal termine SEMAFORO. O meglio (forse non mi sono spiegato bene) la differenza fra un SEMAFORO e un SEMAFORO MUTEX. . .
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No...io non distinguo SEMFOFRO da SEMAFORO MUTEX...distinguo SEMAFORO da MUTEX...
Nel senso che per come l'abbiamo fatta noi...mutex è un caso particolare del semaforo...cioè il semaforo binario... Non sono solamente io a fare questa distinzione...come già detto, su Windows esistono le API CreateMutex e CreateSemaphore... |
|
|
|
|
|
#15 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Ohhh... Vedi allora che avevo capito bene ... Il SEMAFORO MUTEX varia in uno spazio non logicamente definito. Ecco perchè è anche detto semaforo contatore ... Il semaforo binario non è la stessa cosa. Difatti i semafori binari hanno come valori esclusivamente i valori 0 e 1. Ma forse queste sono distinzioni prettamente accademiche:
SEMAFORO -- Variabile generica usata per sincroinizzare processi. SEMAFORO MUTEX -- Semaforo in cui la variabile varia in uno spazio non definito. Detto anche spinlock perchè fa assumere alla macchina una condizione di busy waiting, laddove potrebbe impiegare il lavoro necessario per effettuare altri compiti. SEMAFORO BINARIO -- Semaforo i cui valori sono esclusivamente 0 e 1. Dal binario è possibile implementare il MUTEX. Non presenta busy waiting, quindi niente spinlock. MONITOR -- Arcana strategia implementata sul principio dei semafori per determinare la sezione critica di un processo. Di chiu nin zo |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
Quote:
|
|
|
|
|
|
|
#17 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
|
Riposto la specifica:
--------------------------------------------------------- Gioco del Tris (versione peer-to-peer) Realizzazione di una versione elettronica del famoso "gioco del Tris". In questa versione due processi (ognuno dei quali funge da interfaccia con uno dei due giocatori) cooperano tra loro. Per prima cosa decidono quale dei due processi deve iniziare (il meccanismo di decisione e' lasciato alla discrezione dello studente), poi si accetta come input una mossa, la si trasmette al secondo processo, e ci si pone in attesa di una mossa da parte del secondo processo. Entrambi i processi, ogni volta che ricevono una mossa (sia dal loro giocatore che dall'altro processo) valutano se uno dei due giocatori ha vinto e lo riferiscono al loro giocatore. Il canale di comunicazione tra i due processi deve essere implementato tramite l'uso di memoria condivisa. ------------------------------------------------------------ Devo consegnare il programma il 17. Facendo gli ultimi ritocchi, mi e' caduto l'occhio sulla frase in neretto e mi e' venuto un dubbio atroce..... Nella mia implementazione c'e' un processo padre (che si occupa delle inizializzazioni) e che a un certo punto crea 2 figli: il primo chiama la funzione "giocatore1", il secondo quella "giocatore2".... Prima di fare questo chiede il nome ai due giocatori e, in maniera casuale, decide quale nominativo associare a "giocatore1" e quale invece a "giocatore2". In questo modo, dall'esterno, sembra effettivamente che l'ordine con cui i due giocatori iniziano sia casuale, mentre in realta' il primo figlio giochera' sempre per primo, l'altro sempre per secondo... Senza contare che tutto questo viene fatto dal padre e non, come sembrerebbe da quella frase, dai 2 processi che cooperano tra di loro.... Insomma, non sono sicuro che sia giusto il mio approccio (c'e' sempre la frase "il meccanismo di decisione e' lasciato alla discrezione dello studente", che potrebbe parzialmente pararmi le chiappe) e non ho neanche grandi idee per modificarlo.... Che ne pensate? Vi preeeeeeego...... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:27.



















