PDA

View Full Version : [PROGRAMMAZIONE CONCORRENTE] - Critical section con SWAP


teogros
24-07-2006, 07:22
Ciao ragazzi,
un aiuto per un esame universitario... programmazione per modo di dire insomma. Praticamente devo implementare una sezione critica usando una funzione di swap (EX(V1,V2) definita come segue: <tmp := V1; V1 := V2; V2 := tmp> con V1 e V2 variabili e tmp registro interno.

Io ho una soluzione ma il professore dice che è sbagliata. Chi mi aiuta? :help:

Grazie! ;)

thebol
24-07-2006, 08:52
Ciao ragazzi,
un aiuto per un esame universitario... programmazione per modo di dire insomma. Praticamente devo implementare una sezione critica usando una funzione di swap (EX(V1,V2) definita come segue: <tmp := V1; V1 := V2; V2 := tmp> con V1 e V2 variabili e tmp registro interno.

Io ho una soluzione ma il professore dice che è sbagliata. Chi mi aiuta? :help:

Grazie! ;)

incomincia postando la tua soluzione ;)

teogros
24-07-2006, 09:40
incomincia postando la tua soluzione ;)

Io pensavo di emulare un test-and-set con una soluzione di questo tipo:

int ts(k)
{
int ris = 1;
EX(ris, K);
return(ris);
}

e usarla poi per gestire l'accesso alla CS.

Il problema è che il professore mi dice che non si riesce a garantire che le istruzioni all'interno della graffa, sono atomiche. (ancora devo capire se si riferisce solo alla prima o a tutte, ma credo tutte visto che un'assegnamento è atomico a livello hw).

Grazie.

teogros
24-07-2006, 10:48
Insomma: secondo voi la soluzione sopra è corretta o no? :mbe:

Un'altra possibile, trovata sul web, è questa:



boolean lock = false;
boolean key;

process Pi {
while (true) {
key = true;
while (key = = true)
swap(lock,key);
CS
lock = false;
NCS
}
}


Può funzionare?