Quote:
Originariamente inviato da Tommo
Ma, quello che proponi te a "canali di comunicazione" sembra l'approccio vecchio che NON volevo seguire, con 2 threads in continue race conditions tra di loro...
|
Non necessariamente. Dipende da come implementi il canale e i thread

Ad esempio puoi implementare con due stati:
- registrazione richieste sul canale
- elaborazione e invio risultati sul canale
I due stati possono anche non necessariamente essere lo stesso thread

Il canale può anche essere il dispatcher stesso.
Alloco il thread A, nel costruttore si registra sul canale per un thread di tipo B e due thread di tipo C. Termina il costruttore.
Il canale vedendo le richieste alloca i thread richiesti. Il thread di tipo B richiede l'esecuzione di un thread del tipo D. Il canale alloca un thread di tipo D. Il thread di tipo D non registra alcuna richiesta, quindi i requisiti sono soddisfatti e il canale "invia i risultati" (fra virgolette perché di fatto mette in esecuzione il thread).
Alla fine di D, D invia i risultati sul canale, il canale verifica che i requisiti del thread B sono soddisfatti...invia i risultati ed esegue il thread B.
L'unico che cicla è il thread del canale. Volendo si potrebbe lavorare anche su questo aspetto.