Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Allocazione Dinamica e Programmazione Multiprocesso
Forum - C/C++ - Allocazione Dinamica e Programmazione Multiprocesso

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Peppe91 (Member)
Rookie


Messaggi: 41
Iscritto: 09/04/2011

Segnala al moderatore
Postato alle 15:52
Sabato, 25/06/2011
Questo topic è stato chiuso dal moderatore

Salve gente!
E da un pò che ho iniziato a studiare la programmazione multiprocesso e ho scritto un piccolo programmino che esegue il prodotto matriciale, sfruttando però i processi. Giusto per capire il funzionamento. Ho un processo figlio dove inserisco i dati nelle matrici ed eseguo il prodotto, e il padre, che legge dalla pipe la matrice prodotto scritta dal figlio.
Usando le matrici statiche, se inserisco la porzione di codice relativa all'inserimento dei dati nelle matrici, all'interno del processo figlio, funziona tutto perfettamente.

Invece usando l'allocazione dinamica, se seguo lo stesso procedimento usato per le matrici statiche, non funziona: ovvero, mi memorizza male le matrici e non legge dalla pipe. Se invece la porzione di codice relativa all'inserimento dei dati nelle matrici, la metto fuori da ogni processo, prima della loro creazione, funziona. Com'è possibile?

Forse l'uso dell'allocazione dinamica con i processi crea problemi?

PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Segnala al moderatore
Postato alle 16:26
Sabato, 25/06/2011
L'allocazione dinamica fa "girare" le celle di memoria quindi penso che solo il processo che le ha create e che lo fa "girare" sa come sono messe.
Questa risposta è in linea puramente teorica quindi non darci molto peso.

PM
Avatar
Peppe91 (Member)
Rookie


Messaggi: 41
Iscritto: 09/04/2011

Segnala al moderatore
Postato alle 16:39
Sabato, 25/06/2011
Capito. Quindi se è come dici tu, è un problema di puntatori. Non c'è un modo sicuro che mi consenta di usare l'allocazione dinamica senza incorrere in simili pasticci? :D

PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Segnala al moderatore
Postato alle 16:53
Sabato, 25/06/2011
Mettere variabile globali ma in programmazione multi processo direi che è quasi ridicolo :)

PM
Avatar
Peppe91 (Member)
Rookie


Messaggi: 41
Iscritto: 09/04/2011

Segnala al moderatore
Postato alle 18:13
Sabato, 25/06/2011
Esatto. Però adesso sto provando anche con quelle, ma non funziona.

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:18
Sabato, 25/06/2011
"girare" le celle di memoria non l'avevo sentito mai ... molto divertente ...

A parte le battute, due processi diversi dispongono di indirizzi di memoria virtuale indipendenti tra loro e mappano zone di RAM naturalmente diverse per l'ovvia protezione di cui i processi godono nei moderni sistemi operativi.

Quindi, niente passaggio di puntatori ma solo di valori tra i processi.

Tra i metodi di IPC, un modo opportuno può essere la Shared Memory (vedi funzione mmap)



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Segnala al moderatore
Postato alle 18:19
Sabato, 25/06/2011
Questo perché più processi insieme accedono ad una stessa zona di memoria/variabile..
Devi utilizzare un algoritmo specifico detto di mutua esclusione:

http://it.wikipedia.org/wiki/Mutua_esclusione

Cercando su internet ne trovi parecchi:

http://it.wikipedia.org/wiki/Categoria:Algoritmi_di_mutua_ ...

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:29
Sabato, 25/06/2011
Testo quotato

Postato originariamente da comina8:

Questo perché più processi insieme accedono ad una stessa zona di memoria/variabile..



No. Questo perché non esiste il concetto di "variabile globale" tra processi.

A meno che, appunto, non si sfrutti la Shared Memory. In quel caso, si potrebbe rendere necessaria la "mutua esclusione" (ma non sarebbe obbligatoria).


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Segnala al moderatore
Postato alle 18:42
Sabato, 25/06/2011
E' vero ogni tanto faccio un po' di confusione fra processi e thread...:-|
Comunque a questo punto prova a postare il codice che hai scritto così possiamo capire meglio.

EDIT:
Scusa 'nessuno' ma non avevo letto la tua risposta probabilmente hai postato appena prima di me :)

Ultima modifica effettuata da comina8 il 25/06/2011 alle 18:43
PM
Pagine: [ 1 2 ] Precedente | Prossimo