Precisiamo allora un po' di cose.
MaryA ha scritto:
realizzare una classe thread processo che deve effettuare un numero fissato di elaborazioni.
Ok
MaryA ha scritto:
Per ogni elaborazione il singolo thread usa in mutua esclusione la risorsa di calcolo
Ok, tieni presente che in Java
È possibile fare in modo che un blocco di codice sia eseguito in
mutua esclusione tra più thread, ovvero detto in altro modo che un SOLO thread per volta esegua per intero quel blocco. Questo lo si fa usando opportunamente i lock "intrinseci" degli oggetti (o altro meccanismo di sincronizzazione di più alto livello).
MaryA ha scritto:
una volta che la ottiene la mantiene occupata per un numero fisso di millisecondi
Se intendi dire che quel codice esegue es. una sleep() per attendere (quasi) esattamente tot millisecondi, allora ok, è un conto. Ma se intendi altro, dovresti precisare cosa "fa" il codice.
MaryA ha scritto:
la classe processo ha come campi il numero di esecuzioni del singolo thread e la risorsa di calcolo che gli viene assegnata .
"risorsa di calcolo" cosa intendi? Lo ripeto ancora, NON puoi scegliere tu quale processore/core eseguirà un pezzo di codice.
MaryA ha scritto:
L'unico VINCOLO è che il singolo processo non deve utilizzare mai la cpu per due quanti consecutivi.
Se intendi i "quanti" come inteso dallo schedulatore nativo, cioè i periodi di tempo-cpu che lo schedulatore dà ai thread volta per volta, questo lo ripeto, NON puoi controllarlo.
Se invece intendi che lo stesso thread NON riesegua subito quel blocco di codice, cioè se ci sono per esempio i thread A B e C, e il thread A ha appena eseguito e terminato quel blocco di codice, allora solo B e C sono eleggibili per la esecuzione successiva, in modo che A non lo riesegua
subito.
Questo che ho appena detto si PUO' fare, bisogna sfruttare come minimo i wait/notify intrinseci degli oggetti con una tua piccola logica per cui se un thread X ha appena eseguito quel blocco allora deve restare in wait ALMENO finché un
altro thread l'ha eseguito.