Thread e parallelismo
chi mi può spiegare come mi devo muovere per risolvere questi tipi di esercizi??
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.
questa tabella è già compilata chi mi da una mano nel capire?
/* 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
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.
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
nessuno?