|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 384
|
[c] problema compèilazione con pthread
Salve ragazzi , ho un problema a compilare un esercizio in c , sono neofita in linux , ho guardato in giro i commenti per gli errori ma non riesco a scapparci fuori , forse mancano le librerie ??
quali librerie mancano ?? posix ?? come faccio a installarle ?? ci sarebbe un modo di compilare tutto sotto windows con microsof visual strudio ?? con visual studio mi dice quando compilo : Cannot open include file: 'semaphore.h': No such file or directory compilando con gcc sotto ubuntu , faccio gcc file.c warning: no newline at end of file /tmp/ccKWOzjo.o: In function `coordinatore': monitor.c monitor.c monitor.c monitor.c monitor.c monitor.c collect2: ld returned 1 exit status altrimenti ho provato gcc file.c -o file -lpthread warning : no newline at end of file questo è il file che devo compilare : Come mi devo comportare ?? Mi basterebbe riuscire a compilarlo e dopo lo adatterei alle mie esigenze ............ Grazie per qualsiasi aiuto. #include <stdio> #include <stdlib> #include <windows> #include <pthread> #include <semaphore> #define MAX_SPALATORI 5 //SPALATORI #define MAX_PALE 2 //PALE #define MAX_GUANTI 5 //GUANTI sempre in numero pari #define RALLENTA 40000000 //variabile per rallentare #define SPALATE 3 pthread_mutex_t prendi,rilascia; //mutex per acquisire o rilasciare i 2 tipi di risorse in mutua esclusione pthread_mutex_t mutex; //mutex utilizzato UNICAMENTE per l'accesso in mutua esclusione al buffer di output (per mantenere formattato l'output) sem_t guanti; //semafori inizializzati a G sem_t pale; //semafori inizializzati a P void attesa(); void *spalatore(void *arg) { int i; //while(1) for(i=0; i<SPALATE; i++) { pthread_mutex_lock(&mutex); printf("\nSpalatore n. %d :bevo il caffe\'\n.",arg); //BEVE IL CAFFE attesa(); pthread_mutex_unlock(&mutex); pthread_mutex_lock(&prendi); sem_wait(&guanti); //afferra il guanto destro sem_wait(&guanti); //afferra il guanto sinistro sem_wait(&pale); //afferra la pala pthread_mutex_unlock(&prendi); pthread_mutex_lock(&mutex); printf("\nSpalatore n. %d : Ho preso guanti e pala!! vado a spalare la neve\n",arg); //FA QUALCOSA (spala la neve) attesa(); pthread_mutex_unlock(&mutex); pthread_mutex_lock(&rilascia); sem_post(&guanti); //rilascia il guanto destro sem_post(&guanti); //rilascia il guanto sinistro sem_post(&pale); //rilascia la pala pthread_mutex_unlock(&rilascia); } return NULL; } void main() { char i; void* ret; pthread_t spalatori[MAX_SPALATORI]; pthread_mutex_init(&mutex,NULL); //INIZIALIZZO I SEMAFORI pthread_mutex_init(&prendi,NULL); pthread_mutex_init(&rilascia,NULL); sem_init(&guanti,0,MAX_GUANTI); sem_init(&pale,0,MAX_PALE); attesa(); printf(" ORE 7:30\n\nGli spalatori sono arrivati nel cortile e vanno tutti a prendersi un caffe\'\n\n"); attesa(); printf("Ci sono %d spalatori, %d pale e %d paia di guanti\n\n", MAX_SPALATORI, MAX_PALE+1, MAX_GUANTI+1); attesa(); for (i=0;i<MAX_SPALATORI;i++) //CREO I THREAD { if (pthread_create(&spalatori[i], NULL, spalatore, (void*)i)<0) { fprintf(stderr,"ERRORE!!"); exit(1); } } for (i=0;i<MAX_SPALATORI;i++) { pthread_join(spalatori[i],&ret); } /* pthread_mutex_destroy(&mutex); // DISTRUGGO TUTTI I SEMAFORI pthread_mutex_destroy(&prendi); pthread_mutex_destroy(&rilascia); sem_destroy(&guanti); sem_destroy(&pale); ////////////////////inizia il pomeriggio////////////////////////////////// pthread_mutex_init(&mutex,NULL); //INIZIALIZZO I SEMAFORI pthread_mutex_init(&prendi,NULL); pthread_mutex_init(&rilascia,NULL); sem_init(&guanti,0,MAX_GUANTI-1); sem_init(&pale,0,MAX_PALE-1); */ for (i=0; i<MAX_SPALATORI; i++) { attesa(); printf("\nSpalatore n. %d :bevo il caffe\'\n.",i); } attesa(); printf("\n ORE 12.00\n\nPausa Pranzo, gli spalatori se ne vanno in mensa\n"); attesa(); printf("\n ORE 14.00\n\nEcco gli spalatori di ritorno, ora un caffe\' e poi al lavoro!!\n"); attesa(); for (i=0;i<MAX_SPALATORI;i++) //CREO I THREAD { if (pthread_create(&spalatori[i], NULL, spalatore, (void*)i)<0) { fprintf(stderr,"ERRORE!!"); exit(1); } } for (i=0;i<=MAX_SPALATORI;i++) { pthread_join(spalatori[i],&ret); } for (i=0; i<MAX_SPALATORI; i++) { attesa(); printf("\nSpalatore n. %d :bevo il caffe\'\n.",i); } printf("\n ORE 17.00\n\nOTTIMO LAVORO!!\n\n La giornata e\' finita... gli spalatori se ne tornano a casa!!\n\n"); system("pause"); pthread_mutex_destroy(&mutex); // DISTRUGGO TUTTI I SEMAFORI pthread_mutex_destroy(&prendi); pthread_mutex_destroy(&rilascia); sem_destroy(&guanti); sem_destroy(&pale); } void attesa() { int j; for(j=0; j<RALLENTA; j++) // ciclo per rallentare la visione in output { } }
__________________
ho concuso felicemente con fabbri00 , flueretty, bidduzzo,WildCat Hendrix, chapi,iasudoru, 791ChessMateK ,agma , farina1 . UNICA esperienza negativa utente da evitare sochmell QUI Ultima modifica di 19spike83 : 05-02-2008 alle 14:34. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Manca solo il newline alla fine del file , ma è ignorabilissimo...
__________________
GPU Compiler Engineer |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 384
|
scusate infatti ora mi funziona .... chissa cosa sbagliavo.... bho...
Adesso vedo di modificarlo come mi serve , se ho qualche problema magari scrivo qui. Grazie
__________________
ho concuso felicemente con fabbri00 , flueretty, bidduzzo,WildCat Hendrix, chapi,iasudoru, 791ChessMateK ,agma , farina1 . UNICA esperienza negativa utente da evitare sochmell QUI |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
[OT]
E' già il secondo esercizio in C sui thread che vedo con 'sti benedetti "Spalatori", ma che è, un classico della materia? Questi vanno pure a bersi il caffè ![]() [/OT] |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 384
|
in effetti è vero ci guardavo pure io ....
Si bevono un caffè e spalano ahahhha. Son i soliti esercizi che si danno....spalatori , ippodromo , ecc ecc Ho dei problemini con la coda circolare ... mi vca fuori dalla coda se faccio ripetere continuamente il ciclo.....spero di risolvere sta roba mi fà perdere la testa...
__________________
ho concuso felicemente con fabbri00 , flueretty, bidduzzo,WildCat Hendrix, chapi,iasudoru, 791ChessMateK ,agma , farina1 . UNICA esperienza negativa utente da evitare sochmell QUI |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:31.



















