Qual è l'output di un programma che crea 5 thread, ognuno dei quali incrementa una variabile globale 1000 volte e inizializzata a 0, senza protezione da mutex?Scegli un'alternativa:a. Count: 500b. Count: 5000c. Count: 0d. Count: valore non deterministico
Question
Qual è l'output di un programma che crea 5 thread, ognuno dei quali incrementa una variabile globale 1000 volte e inizializzata a 0, senza protezione da mutex?Scegli un'alternativa:a. Count: 500b. Count: 5000c. Count: 0d. Count: valore non deterministico
Solution
d. Count: valore non deterministico
Spiegazione: Senza un mutex (o un altro meccanismo di sincronizzazione), non c'è garanzia che i thread si eseguiranno in un ordine specifico. Inoltre, l'operazione di incremento non è atomica, il che significa che potrebbe essere interrotta a metà strada da un altro thread. Questo può portare a una condizione di gara, dove il risultato finale dipende dall'ordine esatto in cui i thread vengono eseguiti. Pertanto, l'output è non deterministico.
Similar Questions
I mutex:Scegli un'alternativa:a. Permettono di proteggere una risorsa condivisa e il suo valore può essere modificato dal processo che acquisisce la risorsab. E’ un meccanismo di segnalazione tra processi e serve a condividere una risorsa che può essere utilizzata da più threadc. Nessuna delle precedentid. Hanno lo scopo di proteggere una risorsa condivisa in modo che più processi non possano accedervi contemporaneamente. Un mutex può essere rilasciato solo dal thread che aveva acquisito il lock sulla risorsa.
Cosa farà questo programma? #include <stdio.h>#include <pthread.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int counter = 0;void* incrementCounter(void* arg) { for (int i = 0; i < 1000; i++) { counter++; } return NULL;}int main() { pthread_t thread1, thread2; pthread_create(&thread1, NULL, incrementCounter, NULL); pthread_create(&thread2, NULL, incrementCounter, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); printf("Counter: %d\n", counter); return 0;}Scegli un'alternativa:a. Stampa un valore indeterminato di "Counter".b. Genera un errore di runtime.c. Stampa "Counter: 1000".d. Stampa "Counter: 2000".
Cosa fa il seguente programma? #include <stdio.h>#include <pthread.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int counter = 0;void* incrementCounter(void* arg) { pthread_mutex_lock(&mutex); counter++; pthread_mutex_unlock(&mutex); return NULL;}int main() { pthread_t threads[5]; for (int i = 0; i < 5; i++) { pthread_create(&threads[i], NULL, incrementCounter, NULL); } for (int i = 0; i < 5; i++) { pthread_join(threads[i], NULL); } printf("Counter: %d\n", counter); return 0;}Scegli un'alternativa:a. Stampa "Counter: 1".b. Stampa "Counter: 5".c. Stampa "Counter: 10".d. Stampa un valore casuale tra 0 e 5 per "Counter".
Quali, tra le seguenti espressioni rappresenta la funzione che contiene la routine di un thread?Scegli un'alternativa:a. void *codice_thread(void * arg)b. void codice(void arg)c. int codice_thread()d. int *codice_thread(int * arg)
Nella gestione dei thread, individua tra le seguenti affermazioni quali possono essere considerate come svantaggi:Scegli una o più alternative:a. non è possibile sfruttare il parallelismo fisico in architetture multiprocessore per thread generati dallo stesso processo dato che sono “interni al processo stesso” e quindi assegnati a uno specifico processoreb. se un thread effettua una system call, per esempio per motivi di I/O, oltre che a sospendere se stesso provoca la sospensione del processo che lo ha generato e quindi anche di tutti gli altri thread sempre generati dallo stesso processoc. Elevate prestazioni nell'implementazione di elaborazioni concorrentid. La condivisione è automaticamente garantita poiché tutti i thread condividono la memoria del processo cui appartengono
Upgrade your grade with Knowee
Get personalized homework help. Review tough concepts in more detail, or go deeper into your topic by exploring other relevant questions.