Thread esercizio
non so se è la sezione giusta per parlare di architetture dei calcolatori e sistemi operativi ma non trovando altro credo sia giusta.Comunque ho questo esercizio sui thread
https://docs.google.com/file/d/0BziY2kDqUhJSR0I3RTFnZmVTSUdBaFROT0JNd05OZw/edit
chi mi può spiegare come devo fare per completare le tabelle?
https://docs.google.com/file/d/0BziY2kDqUhJSR0I3RTFnZmVTSUdBaFROT0JNd05OZw/edit
chi mi può spiegare come devo fare per completare le tabelle?
Risposte
E' la sezione corretta. Per vedere l'esercizio mi dice che ho bisogno di richiedere l'accesso al file che non ho abbastanza permessi per accedervi. Se lo rendi pubblico ci rendi un po' tutto più facile. Sarebbe inoltre utile sapere in cosa incontri esattamente difficoltà.
adesso dovrebbe andare http://www.mediafire.com/?a6k4rd2i3zxmd68...comunque il mio problema sta nel fatto che non riesco a capire come funzionano questi esercizi....anche perchè dalle soluzioni del mio professore per quel poco che ne so confronto a lui per me sono insensate
"zavo91":
adesso dovrebbe andare http://www.mediafire.com/?a6k4rd2i3zxmd68...comunque il mio problema sta nel fatto che non riesco a capire come funzionano questi esercizi....anche perchè dalle soluzioni del mio professore per quel poco che ne so confronto a lui per me sono insensate
in pratica il tuo problema è legato solamente all'interpretazione della consegna dell'esercizio, oppure hai dubbi sul comportamente del codice perciò della programmazione concorrente?
non saprei come spiegarmi....il mio problema sta nell'interpretare il codice probabilmente visto che non riesco a capire i valori che ha messo il mio professore nelle tabelle
Riporto, per il momento, il codice per comodità:
init
th_fun1
thfun2
main
init
#define DATA_SIZE 9 #define ARRAY_SIZE 3 #define NUM_BLOCKS DATA_SIZE / ARRAY_SIZE int A [DATA_SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int total = 0; int percent = 0; pthread_mutex_t mutex_total = PTHREAD_MUTEX_INITIALIZER; sem_t sem;
th_fun1
void * th_fun1 (void * arg) { int i; int sum = 0; int * array = (int *) arg; for (i = 0; i < ARRAY_SIZE; i++) { sum = sum + array [i]; /* STATEMENT A */ } /* end for */ pthread_mutex_lock (&mutex_total); total = sum + total; /* STATEMENT B */ pthread_mutex_unlock (&mutex_total); sem_post (&sem); /* STATEMENT C */ } /* end fun1 */
thfun2
void * th_fun2 (void * arg) { int i = 0; int workers = (int) arg; do { sem_wait (&sem); i++; percent = (i * 100) / workers; } while (i < workers); /* end do */ } /* end fun2 */
main
int main (int argc, char ** argv) { int i; pthread_t ths [NUM_BLOCKS], ths2; sem_init (&sem, 0, 0); for (i = 0; i < NUM_BLOCKS; i++) { pthread_create(&ths [i], NULL, th_fun1,(void *) &A [i * NUM_BLOCKS]); } /* end for */ pthread_create (&ths2, NULL, th_fun2, (void *) NUM_BLOCKS); for (i = 0; i < NUM_BLOCKS; i++) { pthread_join (ths [i], NULL); } /* end for */ pthread_join (ths2, NULL); } /* end main */
qualcuno che mi spieghi come funziona questo tipo di esercizio?
Comincia a prendere il codice e capire cosa viene fatto in parallelo e come. Dove ci sono le barriere e come funzionano. Se tu che li stai studiando... Comincia a dare le risposte nel caso in cui il codice fosse fatto con un solo thread.
già fatto e rifatto questo tanto ma non capisco lo stesso
Secondo me in questi esercizi serve astrarre e crearsi mentalmente o su carta le strutture in gioco.
In questo caso si tratta di thread perciò sarebbe da disegnare delle scatole con stack e codice, cioè la memoria.
Disegnamolo allora:

Zoom
Vedi se così ti è più chiaro cosa accade, lascio a te risolvere l'esercizio con i valori da inserire, ma ti ho sottolineato dove avviene parallelismo, per risolverlo devi conoscere:
- competizione tra risorse (mutex/mutua esclusione)
- cooperazione tra risorse (sem(0))
In questo caso si tratta di thread perciò sarebbe da disegnare delle scatole con stack e codice, cioè la memoria.
Disegnamolo allora:

Zoom
Vedi se così ti è più chiaro cosa accade, lascio a te risolvere l'esercizio con i valori da inserire, ma ti ho sottolineato dove avviene parallelismo, per risolverlo devi conoscere:
- competizione tra risorse (mutex/mutua esclusione)
- cooperazione tra risorse (sem(0))
ok grazie mille ci guardo e vi faccio sapere se avete altri suggerimenti datemeli pure li accetto tutti