Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-12-2003, 16:21   #1
Edde
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'
Edde è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2003, 17:07   #2
cionci
Senior Member
 
L'Avatar di cionci
 
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...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2003, 17:07   #3
mjordan
Bannato
 
L'Avatar di mjordan
 
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. Io per esempio avrei usato delle pipe... Fin quando scrivi dati inferiori o uguali a PIPE_BUF come dimensione, non devi preoccuparti della sincronizzazione. Se poi l'esercizio chiedeva esplicitamente l'uso dei semafori è altro conto.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2003, 17:31   #4
fedo
Senior Member
 
L'Avatar di fedo
 
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
fedo è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 01:10   #5
Edde
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
Edde è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 09:27   #6
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Edde
Cmq, nell'ipotesi che si debbano usare i semafori, la soluzione che ho adottato e' corretta o si puo' fare di meglio?
E' corretta...anche se basterebbe una mutex...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 14:04   #7
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da cionci
E' corretta...anche se basterebbe una mutex...
Anche perchè "semafori" e "mutex" sono la stessa cosa ...
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 14:38   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da mjordan
Anche perchè "semafori" e "mutex" sono la stessa cosa ...
Sì, diciamo che il semaforo è una mutex generalizzata...ma ad esempio in Windows ci sono strutture diverse per i semfori e per le mutex...
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.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 15:20   #9
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da cionci
Sì, diciamo che il semaforo è una mutex generalizzata...ma ad esempio in Windows ci sono strutture diverse per i semfori e per le mutex...
La mutex serve per gestire un solo accesso ad una sola risorsa...mentre il semaforo risorse multiple, o accessi multipli alla stessa risorsa...
Concettualmente è sbagliato perchè con MUTEX nella letteratura classica accettata universalmente si indica una qualsiasi variabile semaforo condivisa fra N processi al fine di ottenere la sincronizzazione mutualmente esclusiva ...
Ecco perchè "accessi multipli ad una risorsa" con la parola MUTualEXclusion non va molto d'accordo...

Mah
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 16:08   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da mjordan
Concettualmente è sbagliato perchè con MUTEX nella letteratura classica accettata universalmente si indica una qualsiasi variabile semaforo condivisa fra N processi al fine di ottenere la sincronizzazione mutualmente esclusiva ...
Ecco perchè "accessi multipli ad una risorsa" con la parola MUTualEXclusion non va molto d'accordo...
L'unica mutua esclusione presente nell'uso di un semaforo è quella sulla variabile che tiene il conteggio...
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...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 16:30   #11
Edde
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?
Edde è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 16:38   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da Edde
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?
Nono....hai fatto bene così...intendevo due mutex al posto dei semafori... Una mutex è in effetti identica ad un semaforo binario...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 16:40   #13
mjordan
Bannato
 
L'Avatar di mjordan
 
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. . .
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 16:54   #14
cionci
Senior Member
 
L'Avatar di cionci
 
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...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 17:13   #15
mjordan
Bannato
 
L'Avatar di mjordan
 
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
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 21:11   #16
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
Quote:
Originariamente inviato da mjordan
MONITOR -- Arcana strategia implementata sul principio dei semafori per determinare la sezione critica di un processo.
da programmatore java dico: w i monitor
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2003, 21:29   #17
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da recoil
da programmatore java dico: w i monitor
Meglio se CRT, quelli TFT non mi fanno poi così impazzire
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2003, 18:20   #18
Edde
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......
Edde è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Dongfeng sfida la NATO: navi dalla Cina ...
5G Standalone per il mondo marittimo: Er...
Nova Lake-S: configurazioni fino a 52 co...
Baxi presenta la pompa di calore Alya E ...
PC ASUS e Acer vietati in Germania: il t...
Stellantis rilancia il diesel in Europa:...
Truffa per utenti Trezor e Ledger: lette...
Wi-Fi 7 conveniente: FRITZ! lancia 4630,...
La Formula 1 dei robot tagliaerba miglio...
Il nuovo gioco del creatore di God of Wa...
Grok arriva sulle Tesla in Europa: l'int...
Assassin's Creed IV: Black Flag Remake p...
Il padre di God of War attacca Sons...
È operativo il primo computer qua...
Western Digital avverte: anche gli hard ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:27.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v