INFOPedia : LSOTraghetti

HomePage :: Categorie :: Indice :: Ultime modifiche :: Ultimi commenti :: Login/Registrazione
La versione più recente è stata modificata il 2007-05-25 16:02:48 da ViViana

Aggiunzioni:
In un arcipelago due isole (per semplicità chiamate A e B) sono collegate alla terra ferma e tra di loro da due traghetti (per semplicità T1 e T2), in funzione 24 ore su 24. T1 collega la terra ferma all'isola A; T2 collega l'isola A all'isola B.

Omissioni:
In un arcipelago due isole (per semplicità chiamatie A e B) sono collegate alla terra ferma e tra di loro da due traghetti (per semplicità T1 e T2), in funzione 24 ore su 24. T1 collega la terra ferma all'isola A; T2 collega l'isola A all'isola B.



Modificato il 2007-05-25 16:02:20 da ViViana [testo dell'esercizio]

Aggiunzioni:
In un arcipelago due isole (per semplicità chiamatie A e B) sono collegate alla terra ferma e tra di loro da due traghetti (per semplicità T1 e T2), in funzione 24 ore su 24. T1 collega la terra ferma all'isola A; T2 collega l'isola A all'isola B.
L'isola A ha un porto molto piccolo e consente ad uno solo dei due traghetti di attraccare, quindi i traghetti partono nel momento in cui:
- hanno raggiungono il loro carico massimo (MAXLOADT1 e MAXLOADT2)
- oppure se uno dei due e' attraccato sull'isola A e sta sopraggiungendo l'altro traghetto.


Omissioni:
In un arcipelago composto da due isole (per semplicità chiamati A e B) sono collegate alla terra ferma e tra di loro da due traghetti (per semplicità T1 e T2) , in funzione 24 ore su 24 e che collgano T1 la terra ferma all'isola A , e T2 l'isola A all'isola B . L'isola A ha un porto molto piccolo e consente uno solo dei due traghetti di attraccare quindi Il tragetti partono nel momento in cui o hanno raggiungono il loro carico massimo (MAXLOADT1 e MAXLOADT2) o se uno dei due e attraccato sull'isola A e sta sopragiungendo l'altro traghetto.



Modificato il 2006-06-08 16:57:36 da DenteDiLupo

Aggiunzioni:





Modificato il 2006-06-08 16:56:23 da DenteDiLupo [Versione + aggiornata]

Aggiunzioni:

IMPORTO LE LIBRERIE NECESSARIE


DEFINISCO COSTATI E FUNZIONI

#define MAXLOAD_1 2500
#define MAXLOAD_2 3000
#define T1 5000
#define T2 3000
#define randomize srand((unsigned)time(NULL));
#define GetRandom(min,max) ( ( rand()%(int)(max) ) +min ));
void trag1();
void trag2();

DEFINISCO LE VARIABILI

int stato[2];
0 = fermo 1 = movimento
int vattene[2]; 0 = normale 1 = smuoviti
HANDLE h_porto ;
Mutex per il porto A

MAIN

void main(){
char ch;
INIZIALIZZO MUTEX ED I 2 THREADS
h_porto = CreateMutex(NULL,false,NULL);
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)trag1,NULL,0,NULL);
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)trag2,NULL,0,NULL);
getch();
void trag1(){
int carico;
DWORD result;
while (1) {
VIAGGIO DA C ad A

result = WaitForSingleObject(h_porto,300);
controllo la disponibilità del porto...
if ( (result
WAIT_TIMEOUT ) || (result
WAIT_ABANDONED) ) {
if (stato[1]
0 ){
printf("1) Faccio Partire l'altro traghetto\n");
vattene[1] = 1;
while(stato[1]
0);
else Sleep(T2);
aspetto che l'altro traghetto arriva
else{
stato[0] = 1;
printf("1) Parto da C verso A\n");
Sleep(T1);
printf("1) Arrivo in A\n");
stato[0] = 0;
printf("1 ) Carichiamo professori morti dall'isola A...\n");
while ((carico != MAXLOAD_1) && (vattene[0]
0)){ carico professori morti
carico += 100;
Sleep(50);
if (vattene[0]) {
printf("1 ) Parto perchè sta arrivando l'altro traghetto ...\n");
vattene[0] = 0;
else printf("1) Parto : CARICO PIENO\n");
VIAGGIO DA A a C
ReleaseMutex(h_porto);
stato[0] = 1;
Sleep(T1);
printf("1) Sono arrivato a C, scarico i prof \n");
stato[0] = 0;
Sleep(3000); scarico i prof
void trag2(){
int carico=MAXLOAD_2;
DWORD result;
while (1) {

VIAGGIO DA B ad A

result = WaitForSingleObject(h_porto,300);
controllo la disponibilità del porto...
if ( (result WAIT_TIMEOUT ) || (result
WAIT_ABANDONED) ) {
if (stato[0]
0 ){
printf("2) Faccio Partire l'altro traghetto\n");
vattene[0] = 1;
while(stato[0]
0);
else Sleep(T1);
aspetto che l'altro traghetto arriva
else{
stato[1] = 1;
printf("2) Parto da B verso A\n");
Sleep(T2);
printf("2) Arrivo in A\n");
stato[1] = 0;

printf("2 ) Scarichiamo professori vivi nell'isola A...\n");
Sleep(3000); scarico i prof
while ((carico != 0) && (vattene[1] 0)){
carico professori morti
carico -= 100;
Sleep(50);
if (vattene[1]){
printf("2) Parto perchè sta arrivando l'altro traghetto ...\n");
vattene[1] = 0;
else printf("2) Parto : CARICO VUOTO\n");


VIAGGIO DA A a B
ReleaseMutex(h_porto);
stato[1] = 1;
Sleep(T2);
printf("2) Sono arrivato a B, carico i prof \n");
stato[0] = 0;
while (carico != MAXLOAD_2) {
carico professori vivi
carico += 100;
Sleep(50);


}else

}while(1)

Omissioni:

Importo le librerie necessarie...

#include <stdlib.h>
#include <process.h>

Definisco le funzioni e procedure...

#define randomize srand((unsigned)time(NULL))
#define GetRandom(min,max) ((rand()%(int)(max)+(min)))

Definisco le variabili globali e le costanti...

#define T 2000
definisco un tempo di percorrenza tra 2 porti
#define max_T1 10 definisco il carico massimo del traghetto T1
#define max_T2 20
definisco il carico massimo del traghetto T2
HANDLE H_Mutex_A; definisco un handle per l'isola A
int porto[2];
variabile che mi indica dove è attraccato il traghetto Tn
CRITICAL_SECTION stampa; no comment
void Trag1();
void Trag2();

MAIN...

void main()
{
inizializzo la critical section
InitializeCriticalSection(&stampa);
Creo il mutex
H_Mutex_A = CreateMutex(NULL,false,NULL);
inizializzo le posizioni di partenza dei traghetti
porto[0] = 0;
il traghetto T1 parte dalla terra ferma
porto[1] = 0; il traghetto T2 parte dal porto dell'isola B
Creo i due thread dei traghetti
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Trag1,NULL,0,NULL);
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Trag2,NULL,0,NULL);
while (getch() != 'q');

Trag1...

void Trag1()
{
int carico = 0; variabile che mi indica il carico attuale del traghetto
int finito; variabile che mi indica se ho finito di caricare
int temp;
variabile per il carico da aggiungere
while (1)
{
controllo se il traghetto è nella terra ferma
if (porto[0]
0) {
il traghetto è attraccato al porto di terra ferma con carico = 0
finito = 0;
finchè non è completamente carico non parte
while ( (carico < max_T1) && (finito
0) ) {
arriva un carico
randomize;
temp = GetRandom(1,5);
if ( (carico+temp) <= max_T1)
{
carico = carico + temp;
}
else
{
finito = 1;
}
entro nella critical section <
EnterCriticalSection(&stampa);
printf("il traghetto T1 ha caricato %d\n",carico);
esco dalla critical section <
LeaveCriticalSection(&stampa);
una volta carico,deve partire per il porto dell'isola A
controllo se il porto dell'isola A è libero
if ( porto[1]
0 ) {
WaitForSingleObject(H_Mutex_A,INFINITE);
entro nella critical section <
EnterCriticalSection(&stampa);
printf("il porto A e' libero,il traghetto T1,carico di merda,parte...\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
Sleep(T);
porto[0] = 1;
entro nella critical section <
EnterCriticalSection(&stampa);

printf("il traghetto T1 e' arrivato al porto dell'isola A,scarica la merce...\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
altrimenti,costringo il traghetto T2 a levarsi dalle palle.
else
{
indico a T2 che T1 sta partendo per il porto dell'isola A
porto[0] = 1;
WaitForSingleObject(H_Mutex_A,INFINITE);
entro nella critical section <
EnterCriticalSection(&stampa);
printf("nel porto A c'era T2,lo mando a cagar,e parto...\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
Sleep(T);

entro nella critical section <
EnterCriticalSection(&stampa);
printf("il traghetto T1 e' arrivato al porto dell'isola A,scarica la merce...\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
controllo se il traghetto si trova nel porto dell'isola A
else
{
il taghetto è attraccato al porto dell'isola A con carico = 0
finito = 0;
parte o quando è completamente carico,o quando T2 chiede l'attracco al porto A.
while ( ( carico < max_T1 ) && ( porto[1] 0) && (finito
0) ) {
arriva un carico
randomize;
temp = GetRandom(1,5);
if ( (carico+temp) <= max_T1)
{
carico = carico + temp;
}
else
{
finito = 1;
}
entro nella critical section <
EnterCriticalSection(&stampa);
printf("il traghetto T1 ha caricato %d\n",carico);
esco dalla critical section <
LeaveCriticalSection(&stampa);
ReleaseMutex(H_Mutex_A);
entro nella critical section <
EnterCriticalSection(&stampa);
printf("il traghetto T1 e' partito dal porto dell'isola A\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
Sleep(T);
porto[0] = 0;

Trag2...

void Trag2()
{
int carico = 0; variabile che mi indica il carico attuale del traghetto
int finito; variabile che mi indica se ho finito di caricare
int temp;
variabile per il carico da aggiungere
while (1)
{
controllo se il traghetto è nella terra ferma
if (porto[1] 0) {
il traghetto è attraccato al porto di terra ferma con carico = 0
finito = 0;
finchè non è completamente carico non parte
while ( (carico < max_T2) && (finito
0) ) {
arriva un carico
randomize;
temp = GetRandom(1,5);
if ( (carico+temp) <= max_T2)
{
carico = carico + temp;
}
else
{
finito = 1;
}
entro nella critical section <
EnterCriticalSection(&stampa);
printf("il traghetto T2 ha caricato %d\n",carico);
esco dalla critical section <
LeaveCriticalSection(&stampa);
una volta carico,deve partire per il porto dell'isola A
controllo se il porto dell'isola A è libero
if ( porto[0]
0 ) {
WaitForSingleObject(H_Mutex_A,INFINITE);
entro nella critical section <
EnterCriticalSection(&stampa);
printf("il porto A e' libero,il traghetto T2,carico di merda,parte...\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
Sleep(T);
porto[1] = 1;
entro nella critical section <
EnterCriticalSection(&stampa);

printf("il traghetto T2 e' arrivato al porto dell'isola A,scarica la merce...\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
altrimenti,costringo il traghetto T1 a levarsi dalle palle.
else
{
indico a T1 che T2 sta partendo per il porto dell'isola A
porto[1] = 1;
WaitForSingleObject(H_Mutex_A,INFINITE);
entro nella critical section <
EnterCriticalSection(&stampa);
printf("nel porto A c'era T1,lo mando a cagar,e parto...\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
Sleep(T);

entro nella critical section <
EnterCriticalSection(&stampa);
printf("il traghetto T2 e' arrivato al porto dell'isola A,scarica la merce...\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
controllo se il traghetto si trova nel porto dell'isola A
else
{
il taghetto è attraccato al porto dell'isola A con carico = 0
finito = 0;
parte o quando è completamente carico,o quando T2 chiede l'attracco al porto A.
while ( ( carico < max_T2 ) && ( porto[0]
0) && (finito
0) ) {
arriva un carico
randomize;
temp = GetRandom(1,5);
if ( (carico+temp) <= max_T2)
{
carico = carico + temp;
}
else
{
finito = 1;
}
entro nella critical section <
EnterCriticalSection(&stampa);
printf("il traghetto T2 ha caricato %d\n",carico);
esco dalla critical section <
LeaveCriticalSection(&stampa);
ReleaseMutex(H_Mutex_A);
entro nella critical section <
EnterCriticalSection(&stampa);
printf("il traghetto T2 e' partito dal porto dell'isola A\n");
esco dalla critical section <
LeaveCriticalSection(&stampa);
Sleep(T);
porto[1] = 0;



Modificato il 2006-06-03 15:07:01 da ChiptuttoFuso

Aggiunzioni:
Trag1();
Trag2();

Omissioni:
Trag1;
Trag2;




Modificato il 2006-06-03 15:06:22 da DenteDiLupo

Aggiunzioni:
Trag1;
Trag2;


Omissioni:
Trag1;
Trag2;




Modificato il 2006-06-03 15:01:55 da ChiptuttoFuso

Aggiunzioni:
Torna a Lab Sistemi Operativi



La versione più vecchia di questa pagina è stata modificata il 2006-06-03 14:57:33 da ChiptuttoFuso [sistemato bordello che avevo fatto..]
Vista della pagina:

Problema dei taghetti


In un arcipelago composto da due isole (per semplicità chiamati A e B) sono collegate alla terra ferma e tra di loro da due traghetti (per semplicità T1 e T2) , in funzione 24 ore su 24 e che collgano T1 la terra ferma all'isola A , e T2 l'isola A all'isola B . L'isola A ha un porto molto piccolo e consente uno solo dei due traghetti di attraccare quindi Il tragetti partono nel momento in cui o hanno raggiungono il loro carico massimo (MAXLOADT1 e MAXLOADT2) o se uno dei due e attraccato sull'isola A e sta sopragiungendo l'altro traghetto.

Compito per gli alunni di secondo anno

1. Scrivere il programma Tragretti in C che abbia le i seguenti processi:
Trag1;
Trag2;
Il programma deve soddisfare alle seguenti caratteristiche:
a) assenza di deadlock
b) assenza di partenze con carico maggiore dal consentito
c) assenza di attrachi contemporanei sull'isola A.

2. Spiegare come le proprietà a)-c) sono rispettate dal vostro algoritmo.

//---------------------------------------------------------------------------------------------
// Importo le librerie necessarie...
//---------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <process.h>
#include <windows.h>
#include <conio.h>
#include <time.h>



//---------------------------------------------------------------------------------------------
// Definisco le funzioni e procedure...
//---------------------------------------------------------------------------------------------
#define randomize srand((unsigned)time(NULL))
#define GetRandom(min,max) ((rand()%(int)(max)+(min)))



//---------------------------------------------------------------------------------------------
// Definisco le variabili globali e le costanti...
//---------------------------------------------------------------------------------------------
#define T 2000                                //definisco un tempo di percorrenza tra 2 porti
#define max_T1 10                            //definisco il carico massimo del traghetto T1
#define max_T2 20                            //definisco il carico massimo del traghetto T2
HANDLE H_Mutex_A;                            //definisco un handle per l'isola A
int porto[2];                                //variabile che mi indica dove è attraccato il traghetto Tn
CRITICAL_SECTION stampa;                    //no comment

void Trag1();
void Trag2();



//---------------------------------------------------------------------------------------------
// MAIN...
//---------------------------------------------------------------------------------------------
void main()
{
    //inizializzo la critical section
    InitializeCriticalSection(&stampa);

    //Creo il mutex
    H_Mutex_A = CreateMutex(NULL,false,NULL);

    //inizializzo le posizioni di partenza dei traghetti
    porto[0] = 0;    //il traghetto T1 parte dalla terra ferma
    porto[1] = 0;    //il traghetto T2 parte dal porto dell'isola B

    //Creo i due thread dei traghetti
    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Trag1,NULL,0,NULL);
    CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) Trag2,NULL,0,NULL);

    while (getch() != 'q');
}



//---------------------------------------------------------------------------------------------
// Trag1...
//---------------------------------------------------------------------------------------------
void Trag1()
{
    int carico = 0;                //variabile che mi indica il carico attuale del traghetto
    int finito;                    //variabile che mi indica se ho finito di caricare
    int temp;                    //variabile per il carico da aggiungere

    while (1)
    {
        //controllo se il traghetto è nella terra ferma
        if (porto[0] == 0)
        {
            //il traghetto è attraccato al porto di terra ferma con carico = 0
            carico = 0;
            finito = 0;

            //finchè non è completamente carico non parte
            while ( (carico < max_T1) && (finito == 0) )
            {
                //arriva un carico
                randomize;
                temp = GetRandom(1,5);

                if ( (carico+temp) <= max_T1)
                {
                    carico = carico + temp;
                }
                else
                {
                    finito = 1;
                }
            }

            //entro nella critical section     <-------------------------------------------------------------------------
            EnterCriticalSection(&stampa);

                printf("il traghetto T1 ha caricato %d\n",carico);

            //esco dalla critical section     <-------------------------------------------------------------------------
            LeaveCriticalSection(&stampa);

            //una volta carico,deve partire per il porto dell'isola A
            //controllo se il porto dell'isola A è libero
            if ( porto[1] == 0 )
            {
                WaitForSingleObject(H_Mutex_A,INFINITE);

                //entro nella critical section     <-------------------------------------------------------------------------
                EnterCriticalSection(&stampa);

                    printf("il porto A e' libero,il traghetto T1,carico di merda,parte...\n");

                //esco dalla critical section     <-------------------------------------------------------------------------
                LeaveCriticalSection(&stampa);

                    Sleep(T);
                    porto[0] = 1;

                //entro nella critical section     <-------------------------------------------------------------------------
                EnterCriticalSection(&stampa);
               
                    printf("il traghetto T1 e' arrivato al porto dell'isola A,scarica la merce...\n");

                //esco dalla critical section     <-------------------------------------------------------------------------
                LeaveCriticalSection(&stampa);
            }

            //altrimenti,costringo il traghetto T2 a levarsi dalle palle.
            else
            {
                //indico a T2 che T1 sta partendo per il porto dell'isola A
                porto[0] = 1;

                WaitForSingleObject(H_Mutex_A,INFINITE);

                //entro nella critical section     <-------------------------------------------------------------------------
                EnterCriticalSection(&stampa);

                    printf("nel porto A c'era T2,lo mando a cagar,e parto...\n");

                //esco dalla critical section     <-------------------------------------------------------------------------
                LeaveCriticalSection(&stampa);

                    Sleep(T);
                   
                //entro nella critical section     <-------------------------------------------------------------------------
                EnterCriticalSection(&stampa);

                    printf("il traghetto T1 e' arrivato al porto dell'isola A,scarica la merce...\n");

                //esco dalla critical section     <-------------------------------------------------------------------------
                LeaveCriticalSection(&stampa);


            }

        }
        //controllo se il traghetto si trova nel porto dell'isola A
        else
        {
            //il taghetto è attraccato al porto dell'isola A con carico = 0
            carico = 0;
            finito = 0;

            //parte o quando è completamente carico,o quando T2 chiede l'attracco al porto A.
            while ( ( carico < max_T1 ) && ( porto[1] == 0) && (finito == 0) )
            {
                //arriva un carico
                randomize;
                temp = GetRandom(1,5);

                if ( (carico+temp) <= max_T1)
                {
                    carico = carico + temp;
                }
                else
                {
                    finito = 1;
                }
            }
            //entro nella critical section     <-------------------------------------------------------------------------
            EnterCriticalSection(&stampa);

                printf("il traghetto T1 ha caricato %d\n",carico);

            //esco dalla critical section     <-------------------------------------------------------------------------
            LeaveCriticalSection(&stampa);

            ReleaseMutex(H_Mutex_A);

            //entro nella critical section     <-------------------------------------------------------------------------
            EnterCriticalSection(&stampa);

                printf("il traghetto T1 e' partito dal porto dell'isola A\n");

            //esco dalla critical section     <-------------------------------------------------------------------------
            LeaveCriticalSection(&stampa);

            Sleep(T);
            porto[0] = 0;
        }
    }
}



//---------------------------------------------------------------------------------------------
// Trag2...
//---------------------------------------------------------------------------------------------
void Trag2()
{
    int carico = 0;                //variabile che mi indica il carico attuale del traghetto
    int finito;                    //variabile che mi indica se ho finito di caricare
    int temp;                    //variabile per il carico da aggiungere

    while (1)
    {
        //controllo se il traghetto è nella terra ferma
        if (porto[1] == 0)
        {
            //il traghetto è attraccato al porto di terra ferma con carico = 0
            carico = 0;
            finito = 0;

            //finchè non è completamente carico non parte
            while ( (carico < max_T2) && (finito == 0) )
            {
                //arriva un carico
                randomize;
                temp = GetRandom(1,5);

                if ( (carico+temp) <= max_T2)
                {
                    carico = carico + temp;
                }
                else
                {
                    finito = 1;
                }
            }

            //entro nella critical section     <-------------------------------------------------------------------------
            EnterCriticalSection(&stampa);

                printf("il traghetto T2 ha caricato %d\n",carico);

            //esco dalla critical section     <-------------------------------------------------------------------------
            LeaveCriticalSection(&stampa);

            //una volta carico,deve partire per il porto dell'isola A
            //controllo se il porto dell'isola A è libero
            if ( porto[0] == 0 )
            {
                WaitForSingleObject(H_Mutex_A,INFINITE);

                //entro nella critical section     <-------------------------------------------------------------------------
                EnterCriticalSection(&stampa);

                    printf("il porto A e' libero,il traghetto T2,carico di merda,parte...\n");

                //esco dalla critical section     <-------------------------------------------------------------------------
                LeaveCriticalSection(&stampa);

                    Sleep(T);
                    porto[1] = 1;

                //entro nella critical section     <-------------------------------------------------------------------------
                EnterCriticalSection(&stampa);
               
                    printf("il traghetto T2 e' arrivato al porto dell'isola A,scarica la merce...\n");

                //esco dalla critical section     <-------------------------------------------------------------------------
                LeaveCriticalSection(&stampa);
            }

            //altrimenti,costringo il traghetto T1 a levarsi dalle palle.
            else
            {
                //indico a T1 che T2 sta partendo per il porto dell'isola A
                porto[1] = 1;

                WaitForSingleObject(H_Mutex_A,INFINITE);

                //entro nella critical section     <-------------------------------------------------------------------------
                EnterCriticalSection(&stampa);

                    printf("nel porto A c'era T1,lo mando a cagar,e parto...\n");

                //esco dalla critical section     <-------------------------------------------------------------------------
                LeaveCriticalSection(&stampa);

                    Sleep(T);
                   
                //entro nella critical section     <-------------------------------------------------------------------------
                EnterCriticalSection(&stampa);

                    printf("il traghetto T2 e' arrivato al porto dell'isola A,scarica la merce...\n");

                //esco dalla critical section     <-------------------------------------------------------------------------
                LeaveCriticalSection(&stampa);


            }

        }
        //controllo se il traghetto si trova nel porto dell'isola A
        else
        {
            //il taghetto è attraccato al porto dell'isola A con carico = 0
            carico = 0;
            finito = 0;

            //parte o quando è completamente carico,o quando T2 chiede l'attracco al porto A.
            while ( ( carico < max_T2 ) && ( porto[0] == 0) && (finito == 0) )
            {
                //arriva un carico
                randomize;
                temp = GetRandom(1,5);

                if ( (carico+temp) <= max_T2)
                {
                    carico = carico + temp;
                }
                else
                {
                    finito = 1;
                }
            }
            //entro nella critical section     <-------------------------------------------------------------------------
            EnterCriticalSection(&stampa);

                printf("il traghetto T2 ha caricato %d\n",carico);

            //esco dalla critical section     <-------------------------------------------------------------------------
            LeaveCriticalSection(&stampa);

            ReleaseMutex(H_Mutex_A);

            //entro nella critical section     <-------------------------------------------------------------------------
            EnterCriticalSection(&stampa);

                printf("il traghetto T2 e' partito dal porto dell'isola A\n");

            //esco dalla critical section     <-------------------------------------------------------------------------
            LeaveCriticalSection(&stampa);

            Sleep(T);
            porto[1] = 0;
        }
    }
}
Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.1
La pagina è stata generata in 0.4950 secondi