University stuff.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

Parallel.java 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. class Parallel implements Solver {
  2. class Worker implements Runnable {
  3. MultiRadix mr;
  4. int[] arr;
  5. int start, end;
  6. boolean done = false;
  7. Worker(MultiRadix mr, int[] arr, int start, int end) {
  8. this.mr = mr;
  9. this.arr = arr;
  10. this.start = start;
  11. this.end = end;
  12. }
  13. synchronized public void run() {
  14. arr = mr.radixMulti(arr, start, end);
  15. done = true;
  16. notify();
  17. }
  18. synchronized public int[] getSorted() {
  19. while (!done) {
  20. try { wait(); } catch (InterruptedException ex) {}
  21. }
  22. return arr;
  23. }
  24. }
  25. public int[] sort(int[] arr) {
  26. MultiRadix mr = new MultiRadix();
  27. int n = 4;
  28. int d = arr.length / n;
  29. Worker[] workers = new Worker[n];
  30. Thread[] threads = new Thread[n];
  31. for (int i = 0; i < n; ++i) {
  32. int start = d * i;
  33. int end;
  34. if (i == n - 1)
  35. end = arr.length;
  36. else
  37. end = d * (i + 1);
  38. Worker w; Thread t;
  39. workers[i] = w = new Worker(mr, arr, start, end);
  40. threads[i] = t = new Thread(w);
  41. t.start();
  42. }
  43. int[][] arrs = new int[n][];
  44. for (int i = 0; i < n; ++i) {
  45. arrs[i] = workers[i].getSorted();
  46. try {
  47. threads[i].join();
  48. } catch (InterruptedException ex) {}
  49. }
  50. /*
  51. Worker w = workers[0];
  52. int[] a = arrs[0];
  53. for (int i = w.start; i < w.end; ++i) {
  54. System.out.print(a[i]+" ");
  55. }
  56. System.out.println("");
  57. System.out.println("From "+w.start+" to "+w.end);
  58. */
  59. return arr;
  60. }
  61. }