Programmazione ad eventi

di il
8 risposte

Programmazione ad eventi

Ciao a tutti.

Sto creando un programma che mi permette di gestire due stazioni evitando che queste tra di loro collidano nel momento in cui trasmettono.

la programmazione utilizzata è quella ad eventi.

Allora dopo una parte iniziale già scritta mi sono bloccato su come gestire la parte collisione.

Lo scenario è il seguente.

S1 (stazione 1) trasmette nell'istante T0 e finisce nell'istante T2.
S2 trasmette nell'istante T1 e finisce in T3

quello che io voglio e che la S2 scelga un istante di tempo casuale al'interno di un numero che fisso io e che vede nuovamente se:

viene generato di nuovo un tempo T1 allora deve rifare di nuovo la scelta
altrimenti se viene generato un tempo T3 la trasmissione andrà a buon fine.

VOi come lo implementereste?

8 Risposte

  • Re: Programmazione ad eventi

    Non so se ho capito bene, ma tu vuoi che S1 e S2 non trasmettano nello stesso momento? Se è così potresti usare il meccanismo dei semafori...
  • Re: Programmazione ad eventi

    Praticamente si.

    ovverro veglio che l'istante in cui S2 trasmetta sia subito dopo l'istante di chiusura di trasmissione di S1 (ovvero dopo il tempo T2).


    (se devo usareil semaforo)
    Mi dici dove posso reperire info sul semaforo???
    E come posso implementarlo????
  • Re: Programmazione ad eventi

    Queste 2 stazioni, sono 2 processi o 2 thread?
  • Re: Programmazione ad eventi

    Cioè?

    Scusami se sono così niubbo ma solo ora mi sto avvicinando alla programmazione e in una sett non penso si possa capire tutto:)
  • Re: Programmazione ad eventi

    Dovrebbero essere due thread
  • Re: Programmazione ad eventi

    Per avere 2 processi, puoi essere in uno di questi casi:

    -2 programmi separati (2 file) che lanci uno dopo l'altro;
    -1 solo programma dove crei un secondo processo con la fork, quindi presumo che S1 è il padre e S2 è il figlio, oppure lanci 2 fork (così però alla fine hai 3 processi), dove il padre diciamo che sta li buono e guarda i due figli, di cui uno è S1 e l'altro è S2

    per avere 2 thread:

    -il programma mentre è in esecuzione utilizza la syscall per creare un thread, così ora il programma ha due fili di esecuzione, di cui uno è S1 e l'altro è S2; oppure crei 2 thread, che saranno le due stazioni, però così alla fine ne hai 3 di thread contando il primo con cui è nato il processo.

    in che situazione sei?

    Se non sei in nessuna di queste situazioni, o mi spieghi meglio o mi posti il codice
  • Re: Programmazione ad eventi

    Aspetta ora recupero il codice che fin'ora ho scritto e te lo posto giusto per rendere più chiare la situazione.

    P.S. Sempre se sia fatto bene quello che fin'ora ho scritto
  • Re: Programmazione ad eventi

    Se sono 2 thread puoi usare il meccanismo dei semafori implementati per loro:

    allora ti spiego brevemente come funzionano

    pthread_mutex_t sem; //sem è un semaforo

    pthread_mutex_init(&sem,NULL); //inizializzi sem

    pthread_mutex_lock(&sem); //fai la wait sul semaforo

    pthread_mutex_unlock(&sem); //fai la signal sul semaforo

    usa la lock quando una stazione inizia a fare quello che deve fare, quando finisce usa l'unlock; se nel mentre l'altra stazione fa la lock esso andrà in wait fino a quando la prima non farà la unlock, quando quest'ultima l'avrà fatta quella che era andata in wait esce e continua la sua esecuzione e cosi via...
Devi accedere o registrarti per scrivere nel forum
8 risposte