Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекция по ПП 3.pdf
Скачиваний:
12
Добавлен:
02.06.2015
Размер:
4.72 Mб
Скачать

Пример

Функциисинхронизации/блокировки

Примериллюстрирует синхронизированнуюработу потоков

Основнойциклвыводитнаэкран содержимоеглобального массивацелых чисел.

Поток, названный"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