Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Программное обеспечение
QNX – Real-Time OS
http://www.qnx.com/products/evaluation
Other license keys Academic -> Single user license
Литература
Цилюрик О., Горшко Е. Анатомия параллелизма QNX/UNIX
Кертен Р. Введение в QNX Neutrino 2. Руководство для разработчиков
приложений реального времени
Лабораторная ВМ
Поставщик A Потребитель
#include <pthread.h>
int pthread_create( pthread_t* thread, const pthread_attr_t* attr,
void* (*start_routine)(void* ), void* arg );
thread – идентификатор нити (ID), устанавливается при создании;
attr – атрибутная запись, при значении NULL устанавливается по умолчанию;
void* (*start_routine)(void* ) – функция, код которой выполняется в потоке;
arg – аргумент, передаваемый в функцию потока
Простой вызов - pthread_create(&t, NULL, &func, NULL)
#include <unistd.h>
unsigned int sleep( unsigned int seconds );
#include <semaphore.h>
int sem_init( sem_t * sem, int pshared, unsigned value );
int sem_wait( sem_t * sem );
int sem_post( sem_t * sem );
#include <pthread.h>
int pthread_mutex_init( pthread_mutex_t* mutex, const pthread_mutexattr_t* attr );
int pthread_mutex_lock( pthread_mutex_t* mutex );
int pthread_mutex_unlock( pthread_mutex_t* mutex );
7
Семафоры, условные переменные 2016 v.03
Вызовы функций семафора
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>
8
Семафоры, условные переменные 2016 v.01
Вызовы функций мьютекса
#include <stdio.h>
#include <pthread.h>
pthread_mutex_t mutex
int count = 0;
9
Семафоры, условные переменные 2016 v.01
Использование условных переменных
pthread_cond_t cond;
pthread_mutex_t mutex;
bool c;
10
Семафоры, условные переменные 2019 v.01
0 condition_1 = false thr_1 thr_2
. . .
// Thread_1, thr_1
1 pthread_mutex_lock(&mutex); 1 Захват мьютекса
if (c) 6 Блокировка на
2 pthread_cond_wait(&cond, &mutex); мьютексе
3 Do_Action_1; // c = false Блокировка
5 pthread_mutex_unlock(&mutex);
2 Блокировка на УП, 6 Разблокировка,
освобождение захват мьютекса
мьютекса
5 Освобождение мьютекса
11
Семафоры, условные переменные 2019 v.01
Монитор Хоара
Хоар Чарлз Энтони Ричард 1934
C.A.R. Hoare Monitors: An Operating System Structuring Concept
http://people.cs.uchicago.edu/~shanlu/teaching/33100_fa15/papers/hoare-
monitors.pdf.
monitor имя_монитора;
декларация данных, локальных для монитора;
procedure имя_процедуры (формальные параметры);
begin тело процедуры end;
Декларация других процедур;
begin
Инициализация локальных данных;
еnd.
Поставщик
Буфер
Записать(D)
procedure Записать
D:=Прочитать ОчередьДоступа
monitor Буфер;
СамБуфер array[1..ДлинаБуфера] : Данное;
СчетчикЗаписей : integer;
НеПуст, НеПолон : condition;
begin
СчетчикЗаписей = 0;
endБуфер;