Ciao a tutti, e grazie in anticipo per le risposte.
Ho un'applicazione che si occupa di supervisione, dove ho diversi thread che contemporaneamente eseguono delle richieste di lettura su una porta seriale. Le richieste devono avvenire una per volta, ho sincronizzato i "lettori" con un semaforo:
Semaphore sLettori= new Semaphore(1,1);
Ogni volta che un thread lettore viene schedulato, e accede alla porta modifico il semaforo:
sLettori.WaitOne();
//--- eseguo operazioni di lettura
sLettori.Release();
E fin qui tutto ok nessun problema.
Tramite una semplice giu, l'utente può eseguire delle operazioni di scrittura sulla stessa porta seriale. Ora queste operazioni devono avere la precedenza su quelle di lettura, o meglio ogni volta che si sta per eseguire una lettura, devo prima controllare che non ci sia una scrittura in atto, se c'e, aspetto che essa sia finita e poi eseguo la lettura.
Con un solo semaforo come nella mia soluzione, può funzionare, ma non sono riuscito a dare la precedenza alla scrittura, se quando (esempio) premo un tasto per scrivere, se ci sono dei thread "lettori" già in coda, vengono prima eseguiti quest'ultimi e poi la scrittura.
Ho provato ad implemterare questo problema tramite semafori ma non ci sono riuscito. Sono un po' arrugginito in materia, e visto che è una cosa urgente ho pensato di chiedere aiuto qui sul forum.
Spero di essermi spiegato.