Реферат Курсовая Конспект
Бібліотека Pthread - раздел Философия, Лекція 6 Розбиття програм на множину потоків Бібліотека Pthread Являє Собою Арі Інтерфейс Для Створення І Керування Потока...
|
Бібліотека Pthread являє собою Арі інтерфейс для створення і керування потоками в додатках. Бібліотека Pthread базується на стандартизованому інтерфейсі програмування, який був визначений комітетом по випуску стандартів ІЕЕЕ в стандарті POSIX 1003.1.с. Сторонні фірми-виробники притримуються стандарту POSIX в реалізаціях, які називаються бібліотеками потоків Pthread або POSIX.
Бібліотека Pthread містить більше 60 функцій, які можемо поділити на наступні категорії.
1. Функції керування потоками.
1.1. Конфігурування потоків.
1.2. Відміна потоків.
1.3. Стратегія планування потоків.
1.4. Доступ доданих потоків.
1.5. Обробка сигналів.
1.6. Функції доступу до атрибутів потоку.
1.6.1. Конфігурування атрибутів потоку.
1.6.2. Конфігурування атрибутів, стеків потоків.
1.6.3. Конфігурування атрибутів, стратегій планування потоків.
2. Функції управління мю тексами.
2.1. Конфігурування мю тексів.
2.2. Управління пріоритетами.
2.3. Функції доступу до атрибутів мю тексів.
2.3.1. Конфігурування атрибутів мютексів.
2.3.2. Конфігурування атрибутів протоколів мютексів.
2.3.3. Конфігурування атрибутів управління пріоритетами мютексів.
3. Функції управління умовними змінними.
3.1. Конфігурування умовних змінних.
3.2. Функції доступу до атрибутів умовних змінних.
3.2.1. Конфігурування атрибутів умовних змінних.
3.2.2. Функції спільного використання умовних змінних.
4.1. Анатомія простої багатопоточної програми
Довільна проста багатопоточна програма повинна складатися з основного потоку та функцій, які будуть виконувати інші потоки. Вибрана для реалізації модель створення та функціонування потоків визначає, яким чином в програмі будуть створюватися потоки і як буде відбуватися керування ними. Потоки створюються за принципом ²все і відразу² або при певних умовах. Приклад простої багатопоточної програми, в якій реалізована модель делегування, подано в лістінгу 1.
// Лістінг 1. Використання моделі делегування в простій багато поточній // програмі
# include <iostream>
# include <pthread.h>
void *task1 (void *X) // Визначаємо задачу для виконання потоком ThreadA
{ // . . .
cout << “Потік А завершено” << endl; }
void *task2 (void *X) // Визначаємо задачу для виконання потоком ThreadB
{ // . . .
cout << “Потік B завершено” << endl; }
int main (int argc, char *argv []) {
pthread_t ThreadA, ThreadB; // Оголошуємо потоки
pthread_create (&ThreadA, NULL, task1, NULL); // Створюємо потоки
pthread_create (&ThreadB, NULL, task2, NULL); // Додаткова обробка
pthread_join (ThreadA, NULL); // Очікує завершення потоку
pthread_join (ThreadВ, NULL); // Очікує завершення потоку
return (0); }
В лістінгу 1 робимо акцент на визначенні колекції інструкцій для основного потоку. Основним в даному випадку є керуючий потік, який оголошує два робочих потоки ThreadA і ThreadB. За допомогою функції pthread_create () ці два потоки пов’язуються з задачами, які вони повинні виконувати (task1, task2). Тут (для простоти прикладу) ці задачі всього лише відправляють повідомлення в стандартний вихідний потік, але зрозуміло, що вони могли вирішувати більш корисні задачі. При виклику функції pthread_create () потоки моментально приступають до виконання призначених їм задач. Основний потік очікує до тих пір, доки не завершать роботу обидва робочих потоки. Діаграма послідовностей, що відповідає програмі (лістінг 1), подано на рис. 11. Зверніть увагу на те, відбувається з потоками виконання при виклику функції pthread_create () і pthread_join ().
На рис. 11 показано, що виклик функції pthread_create () є причиною розгалудження, або реалізації ²вилки² в основному потоці виконання, в результаті чого створюються два додаткових потоки (по одному для кожної задачі), які виконуються паралельно. Функція pthread_create () завершується відразу після створення потоків. Ця функція призначена для створення асинхронних потоків. Це означає, що , як робочі потоки, так і основний потік, виконують свої інструкції незалежно один від одного. Функція pthread_join () заставляє основний потік очікувати до тих пір, доки всі робочі потоки завершаться і ²приєднаються² до основного.
4.2. Компіляція та компоновка багатопоточних програм
Всі багатопоточні програми, які використовують бібліотеку потоків POSIX, повинні містити заголовок:
<pthread.h>
Для компіляції багато поточного додатку в середовищі UNIX і Linux з допомогою компіляторів командної стрічки g++ або gсс необхідно з компонувати його з бібліотекою Рthread. Для задання бібліотеки використовуйте опцію -1. Так,команда
-1pthread
забезпечить компоновку вашого додатку з бібліотекою, яка узгоджується з багатопоточним інтерфейсом, який визначається стандартом POSIX 1003.1с. Бібліотеку Рthread, libpthread.so, необхідно розмістити в каталог, в якому зберігається системна стандартна бібліотека, як правило це /usr/lib. Якщо вона буде знаходитися в нестандартному каталозі, то для пошуку компілятора в заданому каталозі до пошуку в стандартних, використайте опцію –L. За командою
g++ -o blackboard – L / src / local / lib blackboard.cpp – lpthread
Закінчені програми, що подаються в лекціях супроводжуються профілем. Профіль програми містить такі спеціальні відомості по її реалізації, як необхідні заголовки та бібліотеки, а також інструкції по компіляції та компоновці. Профіль програми також містить розділ зауважень, зі спеціальною інформацією, яку необхідно враховувати при виконанні програми.
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: Лекція_6.
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Бібліотека Pthread
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов