stgww
16-06-2011, 17:23
Ciao, mi devo preparare all'esame di info2 che avrei dovuto fare lo scorso semestre e dunque non ricordo quasi niente dalle lezioni:D
Apro questo thread per chiedere consigli e chiarimenti.
Ringrazio anticipatamente chiunque riesca a darmi una mano :)
Taglio parti inutili alla comprensione dell'esercizio tipo include e dichiarazioni variabili
Il primo quesito riguarda un esercizio standard in cui mi chiedono di identificare la sequenza che genera un deadlock , segno cosa non capisco nel codice (penso mi stia confondendo con i puntatori, ma ditemi voi)
void foo(int val){
pthread_mutex_lock (& mutexB);
val *= 2; //ma che significa ?
if(val > 4)
pthread_mutex_unlock (& mutexB);
}
void * thread1(void *arg){
pthread_mutex_lock (& mutexA);
foo((int)arg); //sto passando a fool il valore che ho passato nel main?
pthread_mutex_unlock (& mutexA);
if((int)arg < 2)
pthread_mutex_unlock (& mutexB);
pthread_mutex_lock (& mutexA);
printf(”Sono alla fine del thread1\n”);
pthread_mutex_unlock (& mutexA);
return NULL;
}
void * thread2(void *arg){
pthread_mutex_lock (& mutexA);
pthread_mutex_lock (& mutexB);
printf(”Sono alla fine del thread2\n”);
pthread_mutex_unlock (& mutexB);
pthread_mutex_unlock (& mutexA);
return NULL;
}
int main(int argc , char * argv []){
pthread_t th1 , th2;
pthread_create (&th1 , NULL , thread1 , (void *)2); // significa passa il valore 2 al thread 1 ? Finita li ?
pthread_create (&th2 , NULL , thread2 , NULL);
pthread_join(th1 , NULL);
pthread_join(th2 , NULL);
return 0;
}
Apro questo thread per chiedere consigli e chiarimenti.
Ringrazio anticipatamente chiunque riesca a darmi una mano :)
Taglio parti inutili alla comprensione dell'esercizio tipo include e dichiarazioni variabili
Il primo quesito riguarda un esercizio standard in cui mi chiedono di identificare la sequenza che genera un deadlock , segno cosa non capisco nel codice (penso mi stia confondendo con i puntatori, ma ditemi voi)
void foo(int val){
pthread_mutex_lock (& mutexB);
val *= 2; //ma che significa ?
if(val > 4)
pthread_mutex_unlock (& mutexB);
}
void * thread1(void *arg){
pthread_mutex_lock (& mutexA);
foo((int)arg); //sto passando a fool il valore che ho passato nel main?
pthread_mutex_unlock (& mutexA);
if((int)arg < 2)
pthread_mutex_unlock (& mutexB);
pthread_mutex_lock (& mutexA);
printf(”Sono alla fine del thread1\n”);
pthread_mutex_unlock (& mutexA);
return NULL;
}
void * thread2(void *arg){
pthread_mutex_lock (& mutexA);
pthread_mutex_lock (& mutexB);
printf(”Sono alla fine del thread2\n”);
pthread_mutex_unlock (& mutexB);
pthread_mutex_unlock (& mutexA);
return NULL;
}
int main(int argc , char * argv []){
pthread_t th1 , th2;
pthread_create (&th1 , NULL , thread1 , (void *)2); // significa passa il valore 2 al thread 1 ? Finita li ?
pthread_create (&th2 , NULL , thread2 , NULL);
pthread_join(th1 , NULL);
pthread_join(th2 , NULL);
return 0;
}