Что такое функционирование в «Реальном масштабе времени»


Download 1.86 Mb.
Pdf ko'rish
bet68/72
Sana19.04.2023
Hajmi1.86 Mb.
#1362511
TuriУчебное пособие
1   ...   64   65   66   67   68   69   70   71   72
Bog'liq
Луканов А.С. Системы реального времени 2020

6.4. 
Результаты 
# root/a.out 
Start 
Potok 1, vremia starta Tue Oct 21 00:29:01 2003 
Potok 2, vremia starta Tue Oct 21 00:29:01 2003 


144 
Main(): oshidanie y bariera, vremia Tue Oct 21 00:29:01 2003 
barier v potoke 2 , vremia srabativania Tue Oct 21 00:29:07 2003 
barier v main() , vremia srabativania Tue Oct 21 00:29:07 2003 
barier v potoke 1 , vremia srabativania Tue Oct 21 00:29:07 2003 
#/** 
§7. 
Лабораторная работа № 7 «Синхронизация процессов. 
Условные переменные» 
7.1. 
Теория 
 
Условные переменные 
Условные переменные (или «condvars») очень похожи на 
ждущие блокировки, которые мы рассматривали выше. В 
действительности, ждущие блокировки — это надстройка над 
механизмом условных переменных, и именно поэтому в таблице
иллюстрировавшей использование ждущих блокировок, у нас 
встречалось состояние CONDVAR. Функция pthread_cond_wait() 
точно так же освобождает мутекс, ждет, а затем повторно блокирует 
мутекс, аналогично функции pthread_sleepon_wait(). 
7.2. 
Текст программы 
#include 
#include 
int data_ready = 0; 
int inf = 0; 


145 
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 
pthread_cond_t condvar = PTHREAD_COND_INITIALIZER; 
void *consumer (void * notused) 

printf("Eto potrebitel \n"); 
while(1) 

pthread_mutex_lock (&mutex); 
printf("W1 \n"); 
while (!data_ready) 

printf("W2 \n"); 
pthread_cond_wait (&condvar, & mutex);
printf("W3 \n"); 

printf("dannie ot proizv = %d \n",inf); 
data_ready=0; 
pthread_cond_signal(&condvar); 
pthread_mutex_unlock(&mutex); 


void *producer (void * notused) 

printf("Eto ptoizvoditel \n"); 
while(1) 

sleep(2); 
printf("ptoizvoditel polychil dannie ot h/w = %d \n",inf); 
pthread_mutex_lock (&mutex); 


146 
printf("Wp1 \n"); 
while (data_ready) 

printf("Wp2 \n"); 
pthread_cond_wait (&condvar, & mutex);

data_ready=1; 
inf++; 
printf("Wp3 \n"); 
pthread_cond_signal(&condvar); 
pthread_mutex_unlock(&mutex); 


main() 

printf("Start \n"); 
pthread_create(NULL,NULL, consumer,NULL); 
pthread_create(NULL,NULL, producer,NULL); 
sleep(10); 


Download 1.86 Mb.

Do'stlaringiz bilan baham:
1   ...   64   65   66   67   68   69   70   71   72




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling