-
Notifications
You must be signed in to change notification settings - Fork 1
/
omp03.c
40 lines (33 loc) · 2.17 KB
/
omp03.c
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
// Написать программу, в которой объявить и присвоить начальные значения целочисленным переменным: a и b,
// определить две параллельные области, первая – с числом нитей 2, вторая – с числом нитей 4.
// Для первой области переменные a и b объявить защищенными, с режимом доступа private и firstprivate соответственно,
// внутри области определить номер нити и выполнить увеличение значения переменных на это величину.
// Выдать на экран значения переменных до входа в параллельную область,
// внутри параллельной области и после выхода из параллельной области.
// Для второй области переменную a объявить общей, переменную b объявить защищенной,
// с режимом доступа private, определить номер нити и выполнить уменьшение значения переменных на это величину.
// Выдать на экран значения переменных до входа в параллельную область,
// внутри параллельной области и после выхода из параллельной области. (2 балла)
#include <omp.h>
#include <stdio.h>
int main() {
int a = 0, b = 0;
printf("#before a:%d b:%d\n", a, b);
#pragma omp parallel num_threads(2) private(a) firstprivate(b)
{
a = 0;
a += omp_get_thread_num();
b += omp_get_thread_num();
printf("#during%d a:%d b:%d\n", omp_get_thread_num(), a, b);
}
printf("#after a:%d b:%d\n\n\n", a, b);
#pragma omp parallel num_threads(4) shared(a) private(b)
{
b = 0;
#pragma omp atomic
a -= omp_get_thread_num();
b -= omp_get_thread_num();
printf("#during%d a:%d b:%d\n", omp_get_thread_num(), a, b);
}
printf("#after a:%d b:%d\n\n\n", a, b);
}