- •Оглавление
- •Директивы
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Пример
- •Примеры
- •Примеры
- •Примеры
- •Синхронизация
- •Синхронизация
- •Пример
- •Пример
- •Пример
- •Пример
- •Пример
- •Пример
- •Пирмер
- •Пример условной компиляции
- •Вопросы
- •Пример условной компиляции
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Терминология
- •Конец
Пример
Функциисинхронизации/блокировки
Примериллюстрирует синхронизированнуюработу потоков
Основнойциклвыводитнаэкран содержимоеглобального массивацелых чисел.
Поток, названный"Thread",непрерывно заполняетглобальный массивцелыхчисел
192
Пример
Функциисинхронизации/блокировки
1void Thread( void* pParams )
2{
3omp_init_lock(&lock);
4int i, num = 0;
5while (true)
6{
7omp_set_lock(&lock);
8 |
for ( i = 0; i < 5; i++ ) a[ i ] = num; |
9 |
num++; |
10 |
omp_unset_lock(&lock); |
11}
12}
13int _tmain(int argc, _TCHAR* argv[])
14{
15_beginthread( Thread, 0, NULL );
16 |
|
omp_init_lock(&lock); |
17 |
|
while(true) |
18 |
|
{ |
19 |
|
omp_set_lock(&lock); |
20 |
|
printf( "%d %d %d %d %d\n", |
21 |
|
a[ 0 ], a[ 1 ], a[ 2 ], |
22 |
|
a[ 3 ], a[ 4 ] ); |
23 |
|
omp_unset_lock(&lock); |
24 |
|
} |
25 |
|
return 0; |
26 |
} |
193 |
|
Пример
Функциисинхронизации/блокировки
Врезультатезапускапрограммывидно, чтопотокиработаютсинхронизировано:
194
Пример
Функциисинхронизации/блокировки
Выполнениепрограммыбез синхронизирующихфункцийприведет кнесинхроннойработепотоков:
краснымцветом обозначеносостояние, когдаосновной поток выводитмассиввовремя егозаполнения потоком
Thread
195