Sto affrontando un problema in cui dispongo di un flusso di dati che invia dati non ordinati. Sto cercando di trovare un modo per ricevere i dati in ordine casuale, ma inviarlo in ordine.
Ad esempio, riceverò object4
e poi object3
e poi object1
. Avrò bisogno che il mio sistema memorizzi object4
e object3
quando arrivano e invii immediatamente object1
. In futuro, quando arriverà object2
, avrò bisogno che il sistema invii immediatamente object2
e quindi ricontrollo la matrice per inviare object3
e object4
e così via.
Altre informazioni:
- I dati verranno sicuramente ricevuti, quindi non ci sono dati mancanti.
- I dati sono numerati (ad esempio
object1
,object20
).
La mia soluzione attuale è:
- Quando si riceve un nuovo oggetto ...
- se il nuovo oggetto è in ordine, invialo immediatamente.
- Se il nuovo oggetto non è in ordine
- Memorizzalo in un elenco
- Controlla l'elenco se contiene l'oggetto successivo da inviare
- Dopo aver inviato un oggetto ...
- Controlla l'elenco se contiene l'oggetto successivo da inviare
Quindi questo sistema sta ricontrollando l'elenco degli elementi da inviare su due eventi:
- Quando viene aggiunto un nuovo oggetto non in ordine.
- Dopo l'invio riuscito
Come per l'invio
Dopo l'invio riuscito, l'oggetto inviato verrà rimosso dall'elenco
Come per la concorrenza
Per ragioni di discussione, si assuma una relazione produttore-consumatore in cui l'elenco è contemporaneamente accessibile da entrambi i giocatori:
- Il thread del produttore sta trasferendo nuovi dati nell'elenco.
- Il thread del consumatore sta controllando l'elenco, inviando ed eliminando i dati inviati.
La mia domanda è questa, è un buon meccanismo? C'è una struttura dati migliore per aiutarmi con questo problema?