Thread e parallelismo

zavo91
chi mi può spiegare come mi devo muovere per risolvere questi tipi di esercizi??

/* variabili globali */
pthread_mutex_t gate = PTHREAD_MUTEX_INITIALIZER;
sem_t pass;
int posted = 1;

void * header (void * arg) { /* funzione di thread */
                  printf (“Started.\n”);
                 pthread_mutex_lock (&gate);
                 sem_post (&pass);
                 posted = posted + 1; /* statement A */
                 pthread_mutex_unlock (&gate);
                printf (“Finished.\n”);
                return NULL;
} /* header */

void * trailer (void * id) { /* funzione di thread */
                        int gone = 0; /* variabile locale */
                        pthread_mutex_lock (&gate); /* statement B */
                        sem_wait (&pass);
                        pthread_mutex_unlock (&gate);
                        gone = 1; /* statement C */
                        sem_post (&pass);
                        posted = posted + (int) id;
                        return NULL;
} /* trailer */

int main (int argc, char * argv [ ]) { /* thread principale */
                       pthread_t hr, tr1, tr2;
                       sem_init (&pass, 0, 0);
                       pthread_create (&hr, NULL, &header, NULL);
                       pthread_create (&tr1, NULL, &trailer, (void *) 1);
                       pthread_create (&tr2, NULL, &trailer, (void *) 2);
                       pthread_join (hr);
                       pthread_join (tr2); /* statement D */
                       pthread_join (tr1);
} /* main */



Si completi la tabella predisposta qui sotto indicando lo stato di esistenza della variabile locale
nell’istante di tempo specificato da ciascuna condizione, così: se la variabile certamente esiste, si scriva
ESISTE; se certamente non esiste, si scriva NON ESISTE; e se può essere esistente o inesistente, si
scriva PUÒ ESISTERE. Ogni casella della tabella va riempita in uno dei tre modi (non va lasciata vuota).
Si badi bene alla colonna condizione: con subito dopo statement X si chiede lo stato che la variabile
assume tra lo statement X e lo statement immediatamente successivo del thread indicato.
condizione                                variabile locale
                              gone in TR1            gone in TR2
subito dopo stat. A          PUÒ ESISTERE           PUÒ ESISTERE
subito dopo stat. C in TR1    ESISTE                   PUÒ ESISTERE
subito dopo stat. D           PUÒ ESISTERE           NON ESISTE



questa tabella è già compilata chi mi da una mano nel capire?

Risposte
vict85
Scusa ma non comprendo cosa non capisci. Se comprendi il codice non dovresti aver difficoltà a capire l'esercizio e se non capisci il codice allora l'esercizio non è certo il tuo problema. Comunque quello che ti chiede è fondamentalmente di capire quando una variabile viene creata e distrutta.

zavo91
Non riesco a lavorare con i mutex e i semafori pur sapendo cosa fanno...la post incrementa il semaforo la wait decrementa la mutex lock blocca un thread la mutex unlock lo rilascia

zavo91
nessuno?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.