0 / 0 / 0
Регистрация: 16.11.2014
Сообщений: 31
1

Синхронизировать потоки

06.03.2017, 20:17. Показов 307. Ответов 0
Метки нет (Все метки)

Необходимо распараллелить 3 функции : C = A - B , MC = MA*MB ,C = SORT(A)*MB , соответственно A,B,C -векторы, MA,MB - матрицы. Вроде все как мог сделал, но на последнем этапе при выводе отсортированного вектора А получаю обычный, а не отсортированный (ну и дальше я не могу работать) , насколько я понял дело в синхронизации. Как правильно синхронизировать, чтобы получать на этом этапе отсортированный вектор
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
class Lab2
{
    public static void main(String args[])
    { System.out.print(" \n MAIN STARTED \n ");
        T1 t1=new T1();
        T2 t2=new T2();
        T3 t3=new T3();
        T4 t4=new T4();
        T5 t5=new T5();
        T6 t6=new T6();
        T7 t7=new T7();
        t1.setPriority(5);
        t2.setPriority(1);
        t3.setPriority(3);
        t4.setPriority(2);
        t5.setPriority(4);
        t6.setPriority(10);
        t7.setPriority(9);
        t1.start();
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        t6.start();
        t7.start();
 
        try
        {
            Thread.sleep(10000);
        }
        catch (InterruptedException e)
        {
 
            e.printStackTrace();
        }
//------------------------------------------Function1-----------------------------------
        int C[] = new int[10];
 
        System.out.print("\n A= ");
        for(int i=0; i<10; i++)
        {
            System.out.print( T1.A[i] +" ");
        }
 
 
        System.out.print("\n B= ");
        for(int i=0; i<10; i++)
        {
            System.out.print( T2.B[i] +" ");
        }
 
        System.out.print("\n C==A-B \n");
        System.out.print("\n C== ");
        for(int i=0; i<10; i++)
        {
            C[i]=T1.A[i]-T2.B[i];
            System.out.print( C[i] +" ");
        }
        System.out.print("\n _______________________________________________ \n");
 
//------------------------------------------Function2-----------------------------------
        int MC[][] = new int[10][10];
 
        System.out.print("\n MA=     \n");
        for (int i=0; i<10; i++)
        {
            for (int j=0; j<10; j++)
            {
                System.out.print( T3.MA[i][j] +" ");
 
            }System.out.println("");
        }
        System.out.print("\n MB=     \n");
        for (int i=0; i<10; i++)
        {
            for (int j=0; j<10; j++)
            {
                System.out.print( T4.MB[i][j] +" ");
            }System.out.println("");
 
        }
 
 
        System.out.print("\n MA*MB=     \n");
        for (int i=0; i<10; i++)
        {
            for (int j=0; j<10; j++)
            {MC[i][j]=T3.MA[i][j]*T4.MB[j][i];
                System.out.print( MC[i][j] +" ");
            }System.out.print("\n");
        }
        int array[]=new int[100];
        int l=0;
        for (int i=0; i<10; i++){
            for (int j=0; j<10; j++){
                array[l]= MC[i][j];
                l++;
            }
        }
 
//----------Load to MC-------------
        l=0;
        for (int i=0; i<10; i++)
        {
            for (int j=0; j<10; j++)
            {
                MC[i][j]= array[l];
                l++;
            }
        }
 
//------------------------------------------Function3-----------------------------------
        int C2[]= new int[10];
 
      System.out.print("\n (Sort A)=     \n");
        for (int i=0; i<10; i++)
        {System.out.print( T1.A[i] +" ");}
        System.out.print("\n");
 
 
        System.out.print("\n D=(A)*MB=     \n");
        for (int i=0; i<10; i++)
        {System.out.print( T7.C[i] +" ");}
        System.out.print("\n");
 
    }
}
Также пару моментов в класах:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class T6 extends  Thread {
 
    public void run() {
        int t;
        //---------------------------------sort(A)--------------------------------------//
        for (int i = 0; i < 10; i++) {
            for (int j = i + 1; j < 10; j++) {
                if (T1.A[j] < T1.A[i]) {
                    t = T1.A[i];
                    T1.A[i] = T1.A[j];
                    T1.A[j] = t;
                }
            }
        }
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
 
            e.printStackTrace();
        }
        System.out.print(" \n Process  T6 Finished \n  ");
 
    }
 
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class T7 extends  Thread  {
    public static int C[] = new int[10];
    public void run() {
        for (int j = 0; j < 7; j++) {
            for (int i = 0; i < 4; i++) {
                C[j] += T4.MB[i][j] * T1.A[i];
            }
        }
        try
        {
            Thread.sleep(2000);
        }
        catch (InterruptedException e)
        {
 
            e.printStackTrace();
        }
        System.out.print(" \n Process  T7 Finished \n  ");
 
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.03.2017, 20:17
Ответы с готовыми решениями:

Синхронизировать потоки в следующем виде
Помогите пожалуйста решить задачу! На форме есть кнопка и тестовое поле, по нажатию на кнопку нужно...

Объясните, как синхронизировать 2 потока
Привет. главный поток создает 2 потока и передает им себя (this). по завершению загрузки потоки...

Нужно ли синхронизировать доступ на чтение?
Здравствуйте.. Скажите пожалуйста, нужно ли синхронизировать доступ на чтение статического...

Синхронизировать две группы потоков
Здравствуйте. Пытаюсь написать такую программу: есть 2 группы потоков, например Thread1 и Thread2....

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2017, 20:17

Нужно ли синхронизировать добавление элемента, учитывая, что Vector уже является synchronized?
Hi! Я в тредах пока не очень, а приходится начинать с ними работать, причем с уже готовым...

Как синхронизировать System.out и System.err?
Почему выводятся вперемешку сообщения от System.out.println(...) и System.err.println(...), даже...

Синхронизировать потоки
Имеется форма и консольное приложение.Имеется 3 потока, нужно синхронизировать их работу между...

Как синхронизировать потоки?
Есть метод с параметрами, данный метод будет использоваться в трех разных потоках. Параметры...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru