Data la seguente porzione di codicevoid *stampa(void *parametro){ sleep(2); cout << "Ciao sono il thread Pippo.\n";}int main(int na, char **va){ pthread_t tid; pthread_create(&tid, 0, stampa, 0); cout << "Sono il MAIN thread Pluto\n";}L’output del programma è:Scegli un'alternativa:a. Ciao sono il thread PippoSono il Main thread Plutob. Sono il Main thread Plutoc. Sono il Main thread PlutoCiao sonoil thread Pippod. Ciao sono il thread Pippo
Question
Data la seguente porzione di codicevoid *stampa(void *parametro){ sleep(2); cout << "Ciao sono il thread Pippo.\n";}int main(int na, char **va){ pthread_t tid; pthread_create(&tid, 0, stampa, 0); cout << "Sono il MAIN thread Pluto\n";}L’output del programma è:Scegli un'alternativa:a. Ciao sono il thread PippoSono il Main thread Plutob. Sono il Main thread Plutoc. Sono il Main thread PlutoCiao sonoil thread Pippod. Ciao sono il thread Pippo
Solution
Per rispondere alla domanda, analizziamo il codice passo per passo:
-
La funzione
stampaviene definita per essere eseguita come un thread separato. Questa funzione attende 2 secondi (sleep(2)) e poi stampa "Ciao sono il thread Pippo.\n". -
Nel
main, viene dichiarata una variabilepthread_tchiamatatid. -
La funzione
pthread_createviene chiamata per creare un nuovo thread che esegue la funzionestampa. I parametri passati apthread_createsono:&tid: un puntatore alla variabilepthread_tche identificherà il thread.0: attributi del thread (nulli in questo caso).stampa: la funzione che il thread eseguirà.0: argomenti passati alla funzionestampa(nulli in questo caso).
-
Subito dopo la creazione del thread, il
mainthread stampa "Sono il MAIN thread Pluto\n".
Ora, consideriamo l'ordine di esecuzione:
- Il
mainthread stampa immediatamente "Sono il MAIN thread Pluto\n". - Il thread
stampaattende 2 secondi prima di stampare "Ciao sono il thread Pippo.\n".
Quindi, l'output del programma sarà:
Sono il MAIN thread Pluto
Ciao sono il thread Pippo.
L'alternativa corretta è:
c. Sono il Main thread Pluto Ciao sono il thread Pippo
Similar Questions
Cosa stampa il seguente codice? #include <stdio.h>#include <pthread.h>#define NUM_THREADS 3void* threadFunc(void* arg) { int id = *(int*)arg; printf("Thread %d\n", id); return NULL;}int main() { pthread_t threads[NUM_THREADS]; int thread_ids[NUM_THREADS]; for (int i = 0; i < NUM_THREADS; i++) { thread_ids[i] = i; pthread_create(&threads[i], NULL, threadFunc, &thread_ids[i]); } for (int i = 0; i < NUM_THREADS; i++) { pthread_join(threads[i], NULL); } return 0;}Scegli un'alternativa:a. Stampa "Thread 0\nThread 1\nThread 2\n" in ordine casuale.b. Non stampa nulla.c. Stampa "Thread 0\nThread 1\nThread 2\n" in questo ordine.d. Stampa "Thread 2\nThread 1\nThread 0\n" in questo ordine.
Cosa succede eseguendo questo codice? #include <stdio.h>#include <pthread.h>void* printNumbers(void* arg) { for (int i = 0; i < 5; i++) { printf("%d\n", i); } return NULL;}int main() { pthread_t thread; pthread_create(&thread, NULL, printNumbers, NULL); pthread_join(thread, NULL); printf("Done\n"); return 0;}Scegli un'alternativa:a. Non stampa nulla.b. Stampa i numeri da 0 a 4 e poi "Done".c. Stampa "Done" e poi i numeri da 0 a 4.d. Stampa solo "Done".
Qual è il comportamento del seguente codice? #include <stdio.h>#include <pthread.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;void* threadFunc(void* arg) { pthread_mutex_lock(&mutex); printf("Thread is running\n"); pthread_mutex_unlock(&mutex); return NULL;}int main() { pthread_t thread; pthread_create(&thread, NULL, threadFunc, NULL); pthread_mutex_lock(&mutex); printf("Main thread\n"); pthread_mutex_unlock(&mutex); pthread_join(thread, NULL); return 0;}Scegli un'alternativa:a. Stampa "Main thread" seguito da "Thread is running".b. Genera un deadlock.c. Stampa "Thread is running" seguito da "Main thread".d. Stampa "Thread is running" e "Main thread" in ordine casuale.
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)
Cosa farà il seguente programma? #include <stdio.h>#include <pthread.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int sharedVar = 0;void* modifyVar(void* arg) { pthread_mutex_lock(&mutex); sharedVar = *(int*)arg; pthread_mutex_unlock(&mutex); return NULL;}int main() { pthread_t thread; int newValue = 10; pthread_create(&thread, NULL, modifyVar, &newValue); pthread_join(thread, NULL); printf("Shared Variable: %d\n", sharedVar); return 0;}Scegli un'alternativa:a. Stampa "Shared Variable: 10".b. Stampa un valore casuale per "Shared Variable".c. Genera un errore di compilazione.d. Stampa "Shared Variable: 0"
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.