Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OperationSystems

.pdf
Скачиваний:
15
Добавлен:
02.04.2015
Размер:
752 Кб
Скачать
☆

int pthread_mutex_init (pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);

Аргументы:

•mutex – пустая переменная (или уничтоженный флаг), которая будет инициализирована для последующего использования;

•attr – атрибуты создаваемого мьютекса (если NULL – атрибуты по умолчанию).

Функция для удаления мьютекса. После удаления он не может быть использован. Удалять заблокированные мьютексы не рекомендуется – в таких случаях дальнейшее поведение и результат работы программы становятся непредсказуемыми.

int pthread_mutex_destroy(pthread_mutex_t *mutex);

Аргументы:

•mutex – жертва функции, мьютекс, который будет уничтожен.

Функция для перевода мьютекса в заблокированное состояние. Если мьютекс уже заблокирован, то выполнение кода приостанавливается до тех пор, пока мьютекс не будет разблокирован и функция не сможет нормально отработать.

int pthread_mutex_lock(pthread_mutex_t *mutex);

Аргументы:

•mutex – блокируемый мьютекс.

Функция, освобождающая мьютекс. Мьютекс должен быть в заблокированном состоянии.

int pthread_mutex_unlock(pthread_mutex_t *mutex);

Аргументы:

•mutex – разблокируемый мьютекс.

Функция, пытающаяся захватить мьютекс, вызывающий поток ждет некоторое время и, если мьютекс недоступен, продолжает работу без захвата.

int pthread_mutex_trylock ((pthread_mutex_t *__mutex));

Аргументы:

•mutex – мьютекс, который пытается захватить поток.

3.4.2.Семафор

Функция для инициализации семафора.

int sem_init ((sem_t *__sem, int __pshared, unsigned int __value));

Аргументы:

•sem – инициализированный объект;

• pshared – если отличен от нуля, то семафор разделяется между процессами, в противном случае разделение возможно только между потоками управления вызывающего процесса;

•value – начальное значение создаваемого неименованного семафора.

Функция для освобождения ресурсов, связанных с объектом семафора.

int sem_destroy ((sem_t *__sem));

Аргументы:

•sem – семафор.

Функция, уменьшающая на 1 текущее значение общего семафора на

идентификатор которого указывает аргумент sem. Если прежнее значение семафора было 0, поток, выполняющий фиункцию sem_wait блокируется до изменения значения семафора.

int sem_wait ((sem_t *__sem));

Аргументы:

•sem – семафор.

Функция, проверяющая равен ли семафор 0, если равен, то уменьшает его на единицу.

int sem_trywait ((sem_t *__sem));

Аргументы:

•sem – семафор.

Функция, увеличивающая на 1 текущее значение общего семафора на

идентификатор которого указывает аргумент sem. Если прежнее значение семафора было 0 и есть потоки, заблокированные в своей операции sem_wait, один из них разблокируется, но который именно – не определено.

int sem_post ((sem_t *__sem));

Аргументы:

•sem – семафор.

Функция, записывающая текущее значение общего семафора, на идентификатор которого указывает аргумент sem по адресу, задаваемому аргументом sval.

int sem_getvalue ((sem_t *__sem, int *__sval));

Аргументы:

•sem – семафор;

•sval – адрес, по которому сохраняет текущее значение семафора.

3.5.Тривиальный пример организации потоков

myfunc()

{

* * *

//выполняем задание, // если нужно --- читаем данные по адресу в аргументе

* * *

return return_value;

}

main()

{

* * *

//что-то делаем

* * *

pthread_create(...,myfunc,...)

//не забываем запомнить идентификатор

* * *

//что-то делаем

* * *

pthread_join(&return_value)

// если нужно – анализируем выходное значение

* * *

}

2.Задания на лабораторные работы

2.1. Лабораторная работа #1

Разработка многопоточного приложения в ОС Windows.

Выбрать граф запуска потоков соответственно варианту задания. Реализовать последовательно-параллельный запуск потоков в ОС Windows с использованием средств синхронизации. Вершины графа – точки запуска/завершения потоков, дуги – потоки. В графе необходимо самостоятельно выделить три группы потоков. Первая группа не синхронизирована, вторая – синхронизирована мьютексом (захватывает мьютекс на время выполнения), третья – синхронизирована семафорами (передает управление другому потоку после каждой итерации).

2.2. Лабораторная работа #2

Разработка многопоточного приложения средствами POSIX.

Соответственно графу запуска потоков, использованному в предыдущей лабораторной работе, реализовать последовательно-параллельный запуск потоков в ОС Linux с использованием средств синхронизации. В графе необходимо самостоятельно выделить три группы потоков. Первая группа не синхронизирована, вторая – синхронизирована мьютексом (захватывает мьютекс на время выполнения), третья – синхронизирована семафорами (передает управление другому потоку после каждой итерации). В данной лабораторной работе используется библиотека Libpthreads.

3.Требования к оформлению отчетов

–Титульный лист;

–Задание на лабораторную работу;

–Граф запуска потоков;

–Листинг;

–Выводы по проделанной работе.

4.Варианты графов запуска потоков

№

Граф запуска потоков

варианта

 

 

 

1

 

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]