Difference between revisions of "ProvaTeorica 2005.11.04"
Jump to navigation
Jump to search
Line 6: | Line 6: | ||
{ | { | ||
bool playing, exEquo; | bool playing, exEquo; | ||
− | int max, n | + | int max, n, waiting; |
condition wantToPlay, player; | condition wantToPlay, player; | ||
Line 42: | Line 42: | ||
player.wait(); | player.wait(); | ||
else | else | ||
− | + | n = 5; | |
player.signal(); | player.signal(); | ||
return (!exEquo && number == max)? 4 : -1; | return (!exEquo && number == max)? 4 : -1; | ||
Line 49: | Line 49: | ||
void mialzo() | void mialzo() | ||
{ | { | ||
− | if (-- | + | if (--n == 0) |
{ | { | ||
while (waiting > 0 && n < 4) | while (waiting > 0 && n < 4) |
Latest revision as of 20:23, 18 May 2014
TESTO COMPITO
CONCORRENZA
Esercizio 1
monitor casino
{
bool playing, exEquo;
int max, n, waiting;
condition wantToPlay, player;
playing = exEquo = false;
n = waiting = 0;
void misiedo()
{
if (playing)
{
waiting++;
wantToPlay.wait();
waiting--;
}
if (++n < 5)
player.wait();
else
{
playing = true;
max = 0;
}
player.signal();
}
int gioca(int number)
{
if (number == max)
exEquo = true;
else if (number > max)
{
exEquo = false;
max = number;
}
if (--n > 0)
player.wait();
else
n = 5;
player.signal();
return (!exEquo && number == max)? 4 : -1;
}
void mialzo()
{
if (--n == 0)
{
while (waiting > 0 && n < 4)
wantToPlay.signal();
if (waiting > 0)
wantToPlay.signal();
else
playing = false
}
}
}
Esercizio 2
def ssend2(m, d1, d2):
msg = ( SND, getpid(), d1, d2, m )
asend(msg, server)
return arecv(server)
def sreceive():
msg = ( RCV, getpid(), None, None, None )
asend(msg, server)
return arecv(server)
def server():
while True:
flag, src, d1, d2, msg = arecv(*)
if flag == RCV:
msg, sender, _, _ = dbSnd.retrieve(query = '(?, ?, src, ?) or (?, ?, ?, src)')
if msg:
asend(msg, src)
asend(src, sender)
else:
dbRcv.insert(src)
else:
if dbRcv.retrieve(d1):
asend(msg, d1)
asend(d1, src)
elif dbRcv.retrieve(d2):
asend(msg, d2)
asend(d2, src)
else:
dbSnd.insert((msg, src, d1, d2))