Mer 21 Agosto, 10:08:18 - 2019

Autore Topic: Appello 13/01/16  (Letto 3337 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline Szadek Shepard

  • Studente
  • *
  • Post: 13
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #30 il: Lun 01 Febbraio, 17:14:59 - 2016 »
O questo esercizio è più complesso di quanto non sembri, oppure mi son fatto un sacco di falegnamerie mentali,
questo è ciò che son riuscito a fare, ma consiglio di chiedere a terze parti, questo esercizio mi ha confuso parecchio.

SslotLiberi=m                                                 //generico
SleggiRisposta[n ]={0,...0 }                         //binari
SleggiMessaggi=0                                          //generico
slotConMessaggio[m ]={false,...false }         //array di booleani
messaggiGiaLetti[m ]={false,...false }           //array di booleani
processiInAttesa[n ]={false,...false }            //array di booleani
count=0;                                                        //int

Scrivi (Pi)
wait(SslotLiberi,1)
<scrivi in M[j ]>                                             //M[j ] generico slot libero
signal(SleggiMessaggi,1)
slotConMessaggio[j ]=true
processiInAttesa[i ]=true
wait(SleggiRisposta[i ])
<leggi da R>
processiInAttesa[i ]=false

Rispondi
wait(SleggiMessaggi,1)
for(i=1 to m){
  if(slotConMessaggio[i ] && !messaggiGiaLetti[i ]){
    <leggi da M[i ]>
    messaggiGiaLetti[i ]=true
    count++
    break
  }
}
if(count==m){
  <scrivi su R>
  count=1
  for (j=1 to n) {
    if(processiInAttesa[j ])
    signal(SleggiRisposta[j ])
  }
  for(k=1 to m){
    slotConMessaggio[k ]=false
    messaggiGiaLetti[k ]=false
  }
  signal(SslotLiberi,m)
}
« Ultima modifica: Lun 01 Febbraio, 20:24:52 - 2016 da Szadek Shepard »

Offline mychemicalro

  • Studente
  • *
  • Post: 18
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #31 il: Mar 02 Febbraio, 12:43:26 - 2016 »
Io ho provato a farlo utilizzando un array di appoggio di n elementi.
Non so quanto possa essere giusto ..

Codice: [Seleziona]
Dati:
Array[n]
Sem[n] binari per poter scrivere
L[n] binari per poter leggere
R semaforo generico
int index

Init:
for (i=0, i<n; i++) {
      L[i]=0
      Sem[i]=1 abilito tutti a scrivere
      Array[i]=0
}
index=0

SCRIVI:
wait (Sem[i])
<scrivo nella cella index>
<index++>
<Array[i]=1>
Signal(R)
wait(L[i])
<leggi risposta>
Signal(Sem[i])

LEGGI:
wait(R,m)
for(t=0; t<m; t++){
     leggi slot[t]
}
<index=0>
<scrivi risposta>
for(t=0; t<n; t++){
     if(Array[t]==1){
          Signal(L[t])}
     Array[t]=0
}

"Grazie a Dio, sono ateo" (Luis Bunuel)

Offline Peprunner

  • Studente
  • *
  • Post: 43
  • FeedBack: +0/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #32 il: Mar 02 Febbraio, 13:12:51 - 2016 »
grazie mille  ;D sto incontrando qualche difficoltà con il 5° esercizio di gennaio 2016, qualcuno l' ha già svolto? sapete se insisterà su questa tipologia o torna alla cara programmazione di rete?

Offline mychemicalro

  • Studente
  • *
  • Post: 18
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #33 il: Mar 02 Febbraio, 13:16:11 - 2016 »
Spero non torni a chiedere le socket 😂😂
Appena posso posto la soluzione del 5 :)
"Grazie a Dio, sono ateo" (Luis Bunuel)

Offline mychemicalro

  • Studente
  • *
  • Post: 18
  • FeedBack: +2/-0
    • Mostra profilo
Re:Appello 13/01/16
« Risposta #34 il: Mar 02 Febbraio, 17:36:50 - 2016 »
Dovrebbe essere una cosa del genere, manca la gestione degli errori però  :-\
Codice: [Seleziona]

void F(char** s1, char** s2){
int status, fd;

fd=open("mio file", O_CREATE | O_TRUNC | O_RDWR, 0666);

if(fork()!=0){
if(fork()!=0){
}
else {
close(1);
dup(fd);
execvp(s1[0], s1);
}
}
else{
close(0);
dup(fd);
execvp(s2[0], s2);
}
close (fd);

}
"Grazie a Dio, sono ateo" (Luis Bunuel)