Ok visto che il codice sopra e' una valida alternativa alla sincronizzazione, volevo aiutare il nostro amico...
Lui ha due categorie di consumatori e l'unico modo di far differenza nella consumazione dei dati e' qualificando i dati, una partita di tipo A e una partita di tipo B

il problema che mi affligge oramai da 2 settimane e che non ho risolto anche con le infinite ricerche su internet è la gestione della politica della priorità.
i threads consumatori di tipo B possono prelevare dati dal vettore condiviso (dimensione limitata) solo se non esistono in attesa threads consumatori di tipo A.
In pratica i consumatori A saranno sempre alla ricerca di un lock e in questa alternanza lo stato di A sara' sempre o Running o ready(esecuzione, pronto per l'esecuzione) e quindi A sara' sempre in attesa, allora giungo alla conclusione cha debba discriminare i dati, tipo A e tipo B.