Перейти к основному содержанию
EDU-MMCS
Вы используете гостевой доступ (Вход)

2.1-4. Операционные системы

  1. В начало
  2. Курсы
  3. Весенний семестр
  4. Прикладная математика и информатика
  5. PM-OS-2016
  6. Модуль 2: Лабораторная 4: Потоки
  7. Задание 9 параллельная обработка файлов

Задание 9 параллельная обработка файлов

Требуемые условия завершения
Открыто с: суббота, 14 мая 2016, 11:55
Срок сдачи: понедельник, 30 мая 2016, 15:30

Программа получает через аргументы командной строки несколько имён файлов и ищет в каждом файле количество вхождений некоторого символа. В конце программа должна выводить количество вхождений. Если при работе с файлом были какие-либо ошибки (например, он не был открыт), сведения об этом должны выводиться в конце, вместе с количеством вхождений символов. Символ можно для каждого файла генерировать случайный образом, это не имеет значения.

Рекомендуется для каждого файла создать структуру со следующими полями: имя файла, символ, флаг о наличии ошибок и количество символов. Рекомендуется написать функцию, которая получает указать на эту структуру в качестве параметра и не должна использовать глобальные данные. При выполнении функция должна заполнить поля — флаг о наличии/отсутствии ошибки и количество символов. Не рекомендуется, чтобы функция выводила какие-либо сообщения на экран (по крайней мере, в окончательном варианте).

Программа должна иметь следующую структуру:

  1. Создание массива структур для каждого файла.
  2. Исполнение функции с параметром-структурой в цикле.
  3. Вывод данных, накопленных в структурах.

Сначала необходимо выполнить программу без использования потоков и убедиться в её работоспособности.

Затем её нужно модифицировать так, чтобы функции выполнялись в отдельных потоках. Структура программы будет следующая:

  1. Создание массива структур для каждого файла.
  2. Создание потока с функции и параметром-структурой в цикле.
  3. Ожидание завершения потоков.
  4. Вывод данных, накопленных в структурах.

Файлы нужно предварительно создать, они должны быть достаточно большими (> 10M). Следует сравнить быстродействие обоих вариантов программы.

Полезные ссылки

  • http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

Полезные заголовки

#include <pthread.h>

Полезные функции

  • Создание нового потока:

    int pthread_create(
      pthread_t *restrict thread,
      const pthread_attr_t *restrict attr,
      void *(*start_routine)(void *),
      void *restrict arg);
    
  • Прекращение выполнения потока:

    void pthread_exit(void *value_ptr);
    
  • Получение идентификатора текущего потока:

    pthread_t pthread_self(void);
    
  • Посылка сигнала потоку:

    int pthread_kill(pthread_t thread, int sig);
    
  • Прекращение потока:

    int pthread_cancel(pthread_t thread);
    
  • Приостановка текущего потока до завершения потока с идентификатором thread:

    int pthread_join(pthread_t thread, void **value_ptr);
    
  • Проверка того, что t1 и t2 идентифицируют один и тот же поток:

    int pthread_equal(pthread_t t1, pthread_t t2);
    
  • Создание объекта для установки атрибутов потока:

    int pthread_attr_init(pthread_attr_t *attr);            
    
  • Удаление объекта для установки атрибутов потока:

    int pthread_attr_destroy(pthread_attr_t *attr);
    
  • Установка размеров стека для потока:

    int pthread_attr_getstacksize(
      const pthread_attr_t *restrict attr,
      size_t *restrict stacksize);
    
    int pthread_attr_setstacksize(
      pthread_attr_t *attr,
      size_t stacksize);
    

    (и другие pthread_attr_*-функции.)

  • Выполнение инициализации мьютекса:

    int pthread_mutex_init(
      pthread_mutex_t *restrict mutex,
      const pthread_mutexattr_t *restrict attr);
    
  • Удаление мьютекса:

    int pthread_mutex_destroy(pthread_mutex_t *mutex);
    
  • Наложение мюьтекса:

    int pthread_mutex_lock(pthread_mutex_t *mutex);
    
  • Освобождение мьютекса:

    int pthread_mutex_unlock(pthread_mutex_t *mutex);
    
  • Попытка наложения мьютекса без блокировки текущего потока:

    int pthread_mutex_trylock(pthread_mutex_t *mutex);
    
◄ Задание 8: разделяемая память
Задание 10: инкрементирование глобальной переменной ►
Пропустить Навигация
Навигация
  • В начало

    • Страницы сайта

      • Мои курсы

      • Теги

    • Мои курсы

    • Курсы

      • Весенний семестр

        • Прикладная математика и информатика

          • УМФ Т-2025

          • ИНС

          • МО ПМИ

          • ДВ 1.3 Ruby on Rails

          • Летняя практика 2к ТУ

          • ЦИТ

          • Летняя практика ИО

          • М С С

          • Advanced problems - 21

          • ЯП-2024/25 (2)

          • Дистанционная летняя практика 2 курс

          • PM-OS-2016

            • Общее

            • Модуль 1: Лабораторная 1

            • Введение в операционные системы

            • Модуль 1: Лабораторная 2

            • Процессы и многозадачность

            • Модуль 2: Лабораторная 1

            • Многозадачность: планирование

            • IPC: Межпроцесное взаимодействие

            • Модуль 2: Лабораторная 2: Каналы и именованные каналы

            • Модуль 2: Лабораторная 3: Разделяемая память

            • Модуль 2: Лабораторная 4: Потоки

              • ЗаданиеЗадание 9 параллельная обработка файлов

              • ЗаданиеЗадание 10: инкрементирование глобальной переменной

              • ЗаданиеЗадание 11: конвейер

              • ЗаданиеЗадание 12: многопоточный конвейер

              • СтраницаСписок функций к контрольной работе 3

              • ТестКонтрольная работа 3

            • Доборы баллов

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

        • ОИИ

      • Осенний семестр

        • Прикладная математика и информатика

        • Фундаментальная информатика и ИТ

        • Математика, механика

        • Педагогическое образование

        • Магистратура

          • Разработка мобильных приложений и компьютерных игр

        • Аспирантура

        • Вечернее отделение

        • Другое

      • Воскресная компьютерная школа

        • Пользователь компьютера плюс

        • Пользователь прикладных программ

        • Программирование I ступень

        • Программирование II ступень

        • Программирование III ступень

        • Архив

      • Воскресная математическая школа

        • Открытое тестирование РНОМЦ и мехмата ЮФУ - 2025

        • Олимпиадная математическая школа

        • Повышение квалификации

        • Доступная математика

        • Лаборатория математического онлайн-образования мех...

        • Осенняя универсиада

        • Научно-практическая конференция

        • ВМШ

          • ВМШ - 24

        • Летняя олимпиадная математическая школа РНОМЦ и ме...

      • Государственная итоговая аттестация

      • Дополнительное образование

      • Олимпиады

      • Видеолекции

      • Разное

      • Архив курсов

      • Заочная школа мехмата ЮФУ

Служба поддержки сайта
Вы используете гостевой доступ (Вход)
PM-OS-2016
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика