Что такое функционирование в «Реальном масштабе времени»
Download 1.86 Mb. Pdf ko'rish
|
Луканов А.С. Системы реального времени 2020
- Bu sahifa navigatsiya:
- 7.2. Текст программы
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: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling