Ciao ragazzi,
volevo chiedervi un aiuto con C...premetto che sto iniziando adesso a studiare il linguaggio C e, dato che ho Windows XP, ho installato Dev C++.
Quando però compilo un file mi dà tanti errori e non posso mandarlo in esecuzione.
Vi spiego passo passo cosa faccio io, così vedo dove sbaglio.
Allora innanzittuto eseguo questi passi:
FILE-NUOVO-FILE SORGENTE e scrivo il mio bel programmino, che posto qui di seguito:
codice:
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#include<unistd.h>
#include<errno.h>
#define MAX_TURISTI 5
typedef struct
{
pthread_mutex_t gioconda;
pthread_cond_t turno;
int numturisti,turistiSosp;
}louvre;
louvre v;
void init(louvre * L)
{
pthread_mutex_init(&L->gioconda,NULL);
pthread_cond_init(&L->turno,NULL);
L->numturisti=0;
L->turistiSosp=0;
}
void EntraTurista(void * a)
{
struct timeval now;
struct timespec timeout;
gettimeofday(&now,NULL);
timeout.tv_sec=now.tv_sec+rand()%6;
timeout.tv_nsec=now.tv_usec*1000;
int retcode;
pthread_cond_timedwait(&(v.turno),&(v.gioconda),&timeout);
pthread_mutex_lock(&(v.gioconda));
if (v.numturisti<=5)
{
++v.numturisti;
printf("Un turista entra\n In totale ci sono %d turisti \n",v.numturisti);
guarda(&v);
}
else if(v.numturisti>5)
{
v.turistiSosp++;
printf("Un turista aspetta fuori\n In totale ci sono %d turisti che aspettano \n\n",v.turistiSosp);
retcode=pthread_cond_wait(&(v.turno),&(v.gioconda));
v.turistiSosp--;
}
printf("Un turista esce \n");
pthread_mutex_unlock(&(v.gioconda));
}
void guarda(louvre * _v)
{
if(_v->numturisti<=5)
{
pthread_mutex_lock(&(_v->gioconda));
printf("Ci sono %d turisti che guardano la gioconda \n",_v->numturisti);
_v->numturisti--;
pthread_cond_signal(&(_v->turno));
}
}
int main()
{
pthread_t visitor[50];
init(&v);
int i;
for(i=0;i<50;i++)
{
pthread_create(&visitor[i],NULL,EntraTurista,NULL);
sleep(3);
}
for(i=0;i<50;i++)
{
pthread_join(visitor[i],NULL);
}
exit( 0);
}
poi lo salvo:museo.c e clicco su:ESEGUI-COMPILA:
Appena compilo mi escono tutti una serie di errori:
No such file or directory.
14 museo.c syntax error before "pthread_mutex_t"
14 C:\Documents and Settings\user\Documenti\museo.c [Warning] no semicolon at end of struct or union
15 C:\Documents and Settings\user\Documenti\museo.c [Warning] data definition has no type or storage class
17 C:\Documents and Settings\user\Documenti\museo.c syntax error before '}' token
20 C:\Documents and Settings\user\Documenti\museo.c syntax error before "v"
ed altri errori.
Coma mai?dove sbaglio?
Grazie mille a tutti in anticipo