Difference between revisions of "ProvaTeorica 2005.11.04"
Jump to navigation
Jump to search
(One intermediate revision by the same user not shown) | |||
Line 6: | Line 6: | ||
{ | { | ||
bool playing, exEquo; | bool playing, exEquo; | ||
− | int max, n, | + | int max, n, waiting; |
condition wantToPlay, player; | condition wantToPlay, player; | ||
playing = exEquo = false; | playing = exEquo = false; | ||
− | n = 0; | + | n = waiting = 0; |
void misiedo() | void misiedo() | ||
{ | { | ||
if (playing) | if (playing) | ||
+ | { | ||
+ | waiting++; | ||
wantToPlay.wait(); | wantToPlay.wait(); | ||
− | + | waiting--; | |
+ | } | ||
if (++n < 5) | if (++n < 5) | ||
player.wait(); | player.wait(); | ||
Line 22: | Line 25: | ||
{ | { | ||
playing = true; | playing = true; | ||
− | max = 0; | + | max = 0; |
} | } | ||
player.signal(); | player.signal(); | ||
Line 39: | 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 46: | Line 49: | ||
void mialzo() | void mialzo() | ||
{ | { | ||
− | if (-- | + | if (--n == 0) |
− | + | { | |
− | + | while (waiting > 0 && n < 4) | |
+ | wantToPlay.signal(); | ||
+ | |||
+ | if (waiting > 0) | ||
+ | wantToPlay.signal(); | ||
+ | else | ||
+ | playing = false | ||
+ | } | ||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
==Esercizio 2== | ==Esercizio 2== | ||
<syntaxhighlight lang="Python"> | <syntaxhighlight lang="Python"> |
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))