Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* In Java, con i Monitor
- Realizzare una pipeline (catena di montaggio) di N thread/processi.
- Passare ai thread/processi una funzione f(i) (immagino
- la funzione x=x+1) da applicare ai dati secondo lo schema:
- Se f(i) Γ¨ la funzione passata di thread T(i) il risultato sarΓ : */
- public class CreaNThread extends Thread {
- static final int NTHREAD=10; // numero di thread da creare
- static final int MAX=4;
- final int index;
- Pipeline p;
- CreaNThread(int i,Pipeline pipe) {
- index = i; p=pipe;
- }
- public void run(){
- p.threadBody(index);
- }
- public static void main(String args[]) throws InterruptedException {
- int i;
- Pipeline pipe= new Pipeline(MAX);
- Thread t[] = new Thread[NTHREAD];
- // crea 10 thread e li esegue
- for(i=0;i<NTHREAD;i++) {
- t[i] = new CreaNThread(i,pipe);
- t[i].start();
- }
- // attende la terminazione dei thread
- for(i=0;i<NTHREAD;i++) {
- t[i].join();
- }
- // stampa il valore finale della funzione, il valore atteso ed esce
- pipe.stampavalore();
- }/*end of main*/
- }/*end of class*/
- class Pipeline {
- int turno;
- int input[];
- int max;
- public Pipeline(int max){
- turno=0;
- input=new int[max];
- this.max=max;
- for(int i=0;i<max;i++)input[i]=i;
- }
- synchronized int myfunction(int i) {
- return 2*i+1;
- }
- synchronized void threadBody(int i){
- while(turno!=i)
- try{
- wait();
- }catch(Exception e){}
- for(int j=0;j<max;j++)
- input[j]=myfunction(input[j]);
- System.out.println("Thread "+i+" eseguito!");
- turno++;
- notifyAll();
- }
- void stampavalore() {
- System.out.print("Risultato: ");
- for(int i=0;i<max;i++)System.out.print(input[i]+" ");
- System.out.println(".");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement