INFOPedia : LSOTreni2

HomePage :: Categorie :: Indice :: Ultime modifiche :: Ultimi commenti :: Login/Registrazione
La versione più recente è stata modificata il 2006-06-08 16:51:36 da DenteDiLupo [aggiunto link a pagina principale]

Aggiunzioni:
Torna a Lab Sistemi Operativi



Modificato il 2006-06-08 16:50:23 da DenteDiLupo [Aggiunta pagina]

Aggiunzioni:
Treno 1



La versione più vecchia di questa pagina è stata modificata il 2006-06-08 16:46:43 da DenteDiLupo [Aggiunta pagina]
Vista della pagina:

Treni 2


//-----------------------------------------------

//IMPORTO LE LIBRERIE

//-----------------------------------------------



#include <stdio.h>

#include <windows.h>

#include <conio.h>





//-----------------------------------------------

//COSTANTI E FUNZIONI

//-----------------------------------------------



#define T 1000

#define TA1 0

#define TA2 10000



void T1();

void T2();

void T3();



//-----------------------------------------------

//VARIABILI

//-----------------------------------------------



CRITICAL_SECTION cs;

int Andata[2],Ritorno[2];





//-----------------------------------------------

//MAIN

//-----------------------------------------------



void main(){

    int i;

    InitializeCriticalSection(&cs);

    for(i=0;i<2;i++){

        Andata[i] = 0;

        Ritorno[i] = 0;

    }



    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)T1,NULL,0,NULL);

    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)T2,NULL,0,NULL);

    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)T3,NULL,0,NULL);





    getch();

   



}











void T1(){

    int status=0,pos=0; /* 0 fermo 1 movimento */  /* 0 A, 1 C */



    while(1){

        if (pos == 0){ //ANDATA

            EnterCriticalSection(&cs);

                if ((Ritorno[0] == 0) && (Ritorno[1] == 0)){

                    Andata[0]++;

                    Andata[1]++;

                    status=1;

                }

            LeaveCriticalSection(&cs);



            if (status == 1 ){ //treno si muove

                printf("Treno 1 parte per C\n");

                Sleep(T*2);

                pos=1;

                status=0;

                EnterCriticalSection(&cs);

                    Andata[0]--;

                    Andata[1]--;

                LeaveCriticalSection(&cs);

                printf("Treno 1 arriva a C\n");

                Sleep(TA1);

            }else Sleep(500);

        }

        else {  //RITORNO

            EnterCriticalSection(&cs);

                if ((Andata[0] == 0) && (Andata[1] == 0)){

                    Ritorno[0]++;

                    Ritorno[1]++;

                    status=1;

                }

            LeaveCriticalSection(&cs);

           

            if (status == 1 ){ //treno si muove

                printf("Treno 1 parte per A\n");

                Sleep(T*2);

                pos=0;

                status = 0;

                EnterCriticalSection(&cs);

                    Ritorno[0]--;

                    Ritorno[1]--;

                LeaveCriticalSection(&cs);

                printf("Treno 1 arriva a A\n");

                Sleep(TA1);

            }else Sleep(500);



        }



    }

}



void T2(){

    int status=0,pos=0; /* 0 fermo 1 movimento */  /* 0 A, 1 C */

   

    while(1){

        if (pos == 0){ //ANDATA

            EnterCriticalSection(&cs);

                if (Ritorno[0] == 0) {

                    Andata[0]++;

                    status=1;

                }

            LeaveCriticalSection(&cs);

           

            if (status == 1 ){ //treno si muove

                printf("Treno 2 parte per B\n");

                Sleep(T);

                pos=1;

                status=0;

                EnterCriticalSection(&cs);

                    Andata[0]--;

                LeaveCriticalSection(&cs);

                printf("Treno 2 arriva a B\n");

                Sleep(TA2);

            }else Sleep(500);

        }

        else {  //RITORNO

            EnterCriticalSection(&cs);

                if (Andata[0] == 0){

                    Ritorno[0]++;

                    status=1;

                }

            LeaveCriticalSection(&cs);

           

            if (status == 1 ){ //treno si muove

                printf("Treno 2 parte per A\n");

                Sleep(T);

                pos=0;

                status = 0;

                EnterCriticalSection(&cs);

                    Ritorno[0]--;

                LeaveCriticalSection(&cs);

                printf("Treno 2 arriva a A\n");

                Sleep(TA2);

            }else Sleep(500);

           

        }

       

    }

}

void T3(){



    int status=0,pos=0; /* 0 fermo 1 movimento */  /* 0 A, 1 C */

   

    while(1){

        if (pos == 0){ //ANDATA

            EnterCriticalSection(&cs);

                if (Ritorno[1] == 0) {

                    Andata[1]++;

                    status=1;

                }

            LeaveCriticalSection(&cs);

           

            if (status == 1 ){ //treno si muove

                printf("Treno 3 parte per C\n");

                Sleep(T);

                pos=1;

                status=0;

                EnterCriticalSection(&cs);

                    Andata[1]--;

                LeaveCriticalSection(&cs);

                printf("Treno 3 arriva a C\n");

                Sleep(TA2);

            }else Sleep(500);

        }

        else {  //RITORNO

            EnterCriticalSection(&cs);

                if (Andata[1] == 0){

                    Ritorno[1]++;

                    status=1;

                }

            LeaveCriticalSection(&cs);

           

            if (status == 1 ){ //treno si muove

                printf("Treno 3 parte per B\n");

                Sleep(T);

                pos=0;

                status = 0;

                EnterCriticalSection(&cs);

                    Ritorno[1]--;

                LeaveCriticalSection(&cs);

                printf("Treno 3 arriva a B\n");

                Sleep(TA2);

            }else Sleep(500);

           

        }

       

    }

}
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.1
La pagina è stata generata in 0.2546 secondi