Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.21 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package srtrs_v25;
  7.  
  8. import java.util.Arrays;
  9. import java.util.Random;
  10. import java.util.concurrent.Exchanger;
  11.  
  12. /**
  13.  * Created by ljuba on 11.11.14.
  14.  */
  15. class Data {
  16.  
  17.     public int MA[][];
  18.     public int MB[][];
  19.     public int MC[][];
  20.  
  21.     public Data(int[][] MA, int[][] MB, int[][] MC) {
  22.         this.MA = MA;
  23.         this.MB = MB;
  24.         this.MC = MC;
  25.     }
  26. }
  27.  
  28. public class srTRS_l25 {
  29.  
  30.     public static int size = 5;
  31.  
  32.     static class Thread3 extends Thread {
  33.  
  34.         public int MA[][];
  35.         public int MB[][];
  36.         public int MC[][];
  37.         Exchanger<Data> exchanger1;
  38.         Exchanger<Data> exchanger2;
  39.  
  40.         public Thread3(Exchanger<Data> exchanger1, Exchanger<Data> exchanger2) {
  41.             this.exchanger1 = exchanger1;
  42.             this.exchanger2 = exchanger2;
  43.         }
  44.  
  45.         @Override
  46.         public void run() {
  47.             MA = new int[size][size];
  48.             try {
  49.                 MA = new int[size][size];
  50.                 Data d = exchanger1.exchange(new Data(null, null, null));
  51.                 MB = d.MB;
  52.                 MC = d.MC;
  53.                 exchanger2.exchange(new Data(null, MB, MC));
  54.                 for (int i = 4; i < 5; i++) {
  55.                     for (int j = 0; j < size; j++) {
  56.                         for (int k = 0; k < size; k++) {
  57.                             MA[i][j] += MB[i][k] * MC[k][j];
  58.                         }
  59.                     }
  60.                 }
  61.                 System.out.println("Thread3: " + Arrays.toString(MA[4]));
  62.                 d = exchanger1.exchange(new Data(null, null, null));
  63.                 for (int i =  4; i < size; i++) {
  64.                     for (int j = 0; j < size; j++) {
  65.                         d.MA[i][j] = MA[i][j];
  66.                     }
  67.                 }
  68.                 for (int i = 0; i < size; i++) {
  69.                     System.out.println(Arrays.toString(d.MA[i]));
  70.                 }
  71.             } catch (InterruptedException e) {
  72.                 //**
  73.             }
  74.         }
  75.     }
  76.  
  77.     static class Thread4 extends Thread {
  78.  
  79.         public int MA[][];
  80.         public int MB[][];
  81.         public int MC[][];
  82.         Exchanger<Data> exchanger1;
  83.         Exchanger<Data> exchanger2;
  84.  
  85.         public Thread4(Exchanger<Data> exchanger1, Exchanger<Data> exchanger2) {
  86.             this.exchanger1 = exchanger1;
  87.             this.exchanger2 = exchanger2;
  88.         }
  89.  
  90.         @Override
  91.         public void run() {
  92.             MA = new int[size][size];
  93.             MB = new int[size][size];
  94.             MC = new int[size][size];
  95.             System.out.println("MB:");
  96.             for (int i = 0; i < size; i++) {
  97.                 for (int j = 0; j < size; j++) {
  98.                     MB[i][j] = i + 1;
  99.  
  100.                 }
  101.                 System.out.println(Arrays.toString(MB[i]));
  102.             }
  103.             try {
  104.                 MA = new int[size][size];
  105.                 Data d = exchanger1.exchange(new Data(null, MB, null));
  106.                 MC = d.MC;
  107.                 exchanger2.exchange(new Data(null, MB, MC));
  108.                 for (int i = 2; i < 3; i++) {
  109.                     for (int j = 0; j < size; j++) {
  110.                         for (int k = 0; k < size; k++) {
  111.                             MA[i][j] += MB[i][k] * MC[k][j];
  112.                         }
  113.                     }
  114.                 }
  115.                 System.out.println("Thread4: " + Arrays.toString(MA[2]));
  116.                 d = exchanger1.exchange(new Data(null, null, null));
  117.                 for (int i = 0; i < 2; i++) {
  118.                     for (int j = 0; j < size; j++) {
  119.                         MA[i][j] = d.MA[i][j];
  120.                     }
  121.                 }
  122.                 for (int i = 3; i < size; i++) {
  123.                     for (int j = 0; j < size; j++) {
  124.                         MA[i][j] = d.MA[i][j];
  125.                     }
  126.                 }
  127.                 exchanger2.exchange(new Data(MA, null, null));
  128.             } catch (InterruptedException e) {
  129.                 //**
  130.             }
  131.         }
  132.     }
  133.  
  134.     static class Thread5 extends Thread {
  135.  
  136.         public int MA[][];
  137.         public int MB[][];
  138.         public int MC[][];
  139.         Exchanger<Data> exchanger1;
  140.         Exchanger<Data> exchanger2;
  141.  
  142.         public Thread5(Exchanger<Data> exchanger1, Exchanger<Data> exchanger2) {
  143.             this.exchanger1 = exchanger1;
  144.             this.exchanger2 = exchanger2;
  145.         }
  146.  
  147.         @Override
  148.         public void run() {
  149.             MA = new int[size][size];
  150.             MB = new int[size][size];
  151.             MC = new int[size][size];
  152.             System.out.println("MC:");
  153.             Random rand = new Random();
  154.             for (int i = 0; i < size; i++) {
  155.                 for (int j = 0; j < size; j++) {
  156.                     MC[i][j] = 2;//rand.nextInt(3)+1;
  157.                 }
  158.                 System.out.println(Arrays.toString(MC[i]));
  159.             }
  160.             try {
  161.  
  162.                 Data d = exchanger1.exchange(new Data(null, null, MC));
  163.                 MB = d.MB;
  164.                 exchanger2.exchange(new Data(null, MB, MC));
  165.                 for (int i = 3; i < 4; i++) {
  166.                     for (int j = 0; j < size; j++) {
  167.                         for (int k = 0; k < size; k++) {
  168.                             MA[i][j] += MB[i][k] * MC[k][j];
  169.                         }
  170.                     }
  171.                 }
  172.                 System.out.println("Thread5: " + Arrays.toString(MA[3]));
  173.                 d = exchanger2.exchange(new Data(null, null, null));
  174.                 for (int i = 3; i < size; i++) {
  175.                     for (int j = 0; j < size; j++) {
  176.                         d.MA[i][j] = MA[i][j];
  177.                     }
  178.                 }
  179.                 exchanger1.exchange(d);
  180.  
  181.             } catch (InterruptedException e) {
  182.                 //**
  183.             }
  184.         }
  185.     }
  186.  
  187.     static class Thread2 extends Thread {
  188.  
  189.         public int MA[][];
  190.         public int MB[][];
  191.         public int MC[][];
  192.         Exchanger<Data> exchanger1;
  193.         Exchanger<Data> exchanger2;
  194.         Exchanger<Data> exchanger3;
  195.  
  196.         public Thread2(Exchanger<Data> exchanger1, Exchanger<Data> exchanger2, Exchanger<Data> exchanger3) {
  197.             this.exchanger1 = exchanger1;
  198.             this.exchanger2 = exchanger2;
  199.             this.exchanger3 = exchanger3;
  200.         }
  201.  
  202.         @Override
  203.         public void run() {
  204.             try {
  205.                 MA = new int[size][size];
  206.                 Data d = exchanger1.exchange(new Data(null, null, null));
  207.                 MC = d.MC;
  208.                 d = exchanger3.exchange(new Data(null, null, null));
  209.                 MB = d.MB;
  210.                 exchanger2.exchange(d);
  211.                 for (int i = 0; i < 1; i++) {
  212.                     for (int j = 0; j < size; j++) {
  213.                         for (int k = 0; k < size; k++) {
  214.                             MA[i][j] += MB[i][k] * MC[k][j];
  215.                         }
  216.                     }
  217.                 }
  218.                 System.out.println("Thread2: " + Arrays.toString(MA[0]));
  219.                 exchanger2.exchange(new Data(MA, null, null));
  220.                 d = exchanger2.exchange(new Data(null, null, null));
  221.                 exchanger1.exchange(d);
  222.  
  223.             } catch (InterruptedException e) {
  224.                 //**
  225.             }
  226.         }
  227.     }
  228.  
  229.     static class Thread1 extends Thread {
  230.  
  231.         public int MA[][];
  232.         public int MB[][];
  233.         public int MC[][];
  234.         Exchanger<Data> exchanger1;
  235.  
  236.         public Thread1(Exchanger<Data> exchanger1) {
  237.             this.exchanger1 = exchanger1;
  238.         }
  239.  
  240.         @Override
  241.         public void run() {
  242.             try {
  243.                 MA = new int[size][size];
  244.                 Data d = exchanger1.exchange(new Data(null, null, null));
  245.                 MB = d.MB;
  246.                 MC = d.MC;
  247.                 for (int i = 1; i < 2; i++) {
  248.                     for (int j = 0; j < size; j++) {
  249.                         for (int k = 0; k < size; k++) {
  250.                             MA[i][j] += MB[i][k] * MC[k][j];
  251.                         }
  252.                     }
  253.                 }
  254.                 System.out.println("Thread1: " + Arrays.toString(MA[1]));
  255.                 d = exchanger1.exchange(new Data(null, null, null));
  256.                 for (int i = 0; i < 1; i++) {
  257.                     for (int j = 0; j < size; j++) {
  258.                         MA[i][j] = d.MA[i][j];
  259.                     }
  260.                 }
  261.                 exchanger1.exchange(new Data(MA, null, null));
  262.             } catch (InterruptedException e) {
  263.                 //--
  264.             }
  265.         }
  266.     }
  267.  
  268.     public static void main(String[] args) {
  269.         Exchanger<Data> e1 = new Exchanger<Data>();
  270.         Exchanger<Data> e2 = new Exchanger<Data>();
  271.         Exchanger<Data> e3 = new Exchanger<Data>();
  272.         Exchanger<Data> e4 = new Exchanger<Data>();
  273.         Exchanger<Data> e5 = new Exchanger<Data>();
  274.  
  275.         new Thread1(e5).start();
  276.         new Thread2(e3, e5, e4).start();
  277.         new Thread3(e2, e4).start();
  278.         new Thread4(e1,e2).start();
  279.         new Thread5(e1,e3).start();
  280.     }
  281. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement