Desidero fornire alcune funzionalità di libreria e un'applicazione di riferimento, che verrà eseguita su una piattaforma conforme a POSIX completa di funzionalità. L'app e la libreria necessitano di comunicazione bidirezionale della porta seriale, input dell'utente da tastiera, visualizzazione utente alla console di testo e probabilmente timer.
Desidero anche fornire una guida per il porting in modo che gli utenti della libreria possano portarlo (con o senza l'applicazione di riferimento) alle proprie piattaforme, che potrebbero essere conformi o meno a POSIX e potrebbero supportare o meno thread multipli .
Mi sto occupando del problema della portabilità della piattaforma principale scrivendo codice portatile per tutto il più possibile e fornendo un livello di porting autonomo per il codice specifico della piattaforma. Nella mia guida al porting dirò all'utente di sostituire le funzioni del livello di porting con le implementazioni per la propria piattaforma.
Tuttavia, per quanto riguarda il modello di threading, ho due scelte:
- implementare la mia applicazione di riferimento come un programma a thread singolo molto semplice (il ciclo principale eseguirà il polling della tastiera, eseguirà il polling della porta seriale, controllerà lo stato del timer e richiamerà le funzioni della libreria come necessario)
- utilizza la libreria pthreads e ha una thread principale dell'app con thread separati per l'input dell'utente, la ricezione della porta seriale e la scadenza del timer, i quali inviano messaggi al thread della mia app principale per l'elaborazione.
Qualunque sia il modello che scelgo, dovrò spiegare agli utenti come portarlo su una piattaforma che potrebbe utilizzare un modello diverso.
Anche se utilizzo un'implementazione a thread singolo per l'app di riferimento, mi assicurerò che tutte le funzionalità della libreria siano rientranti (o pongo grosse accuse se non è possibile).
Quali considerazioni dovrei tenere a mente, nella mia implementazione e nella guida al porting? Quali informazioni vorresti se eseguissi il porting di un codice multi-thread su un singolo sistema thread o viceversa?